长话短说,我的模型关系定义如下:
项目has_many :groups
小组has_many :items
我的目标是在项目范围内使项目名称唯一。自:items
以来
表没有定义project_id
外键,只需写入add_index :items, :name, unique: { scope: :project_id }
将无效。我是铁杆新手,我错过了什么?如何解决这个问题?
答案 0 :(得分:2)
我认为最好的解决方案是将project_id
包含到items
表中,并使(project_id
,item_name
)成为唯一索引。要自动填充project_id
列,您可以使用before_save
回调:
class Item
before_save :fill_project_id_field
private
def fill_project_id_field
self.project_id = self.group.project_id
end
end
您当然可以使用验证,但效果不佳。以及触发器(数据库端)。他们都假设你是唯一一个在给定时刻使用数据库的人。这并不总是正确的,并且您将以这种方式最终解决数据完整性问题。