这是我的问题的一个例子.
我有一个’房间’模型:
class Room < ActiveRecord::Base
has_many :items, :inverse_of => :room
accepts_nested_attributes_for :items
end
我有一个’Item’模型:
class Item < ActiveRecord::Base
belongs_to :room, :inverse_of => :items
validates :some_attr, :uniqueness => { :scope => :room}
end
我想验证属于某个房间的所有Items的some_attr属性的唯一性.
当我尝试验证项目时,我收到此错误:
TypeError (Cannot visit Room)
我无法将验证范围设置为:room_id,因为项目尚未保存,因此id为nil.我还想阻止在“房间”模型中使用自定义验证器.
在Rails中有什么干净的方法吗?我也想知道我是否正确设置了:inverse_of选项…
最佳答案 我对你如何使用inverse_of没有看错.
至于问题,在类似的情况下,我最终在迁移中强制执行唯一性约束,就像这样
add_index :items, [ :room_id, :some_attr ], :unique => true
这是AR级验证的补充
validates_uniqueness_of :some_attr, :scope => :room_id
(我不确定将关联名称用作范围是否有效,在尝试引用查询中不存在的房间列时,数据库适配器是否会引发异常?)