如何在祖父母模型的范围内使儿童模特的领域独一无二?

时间:2015-09-17 20:10:46

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

长话短说,我的模型关系定义如下:

项目has_many :groups
小组has_many :items

我的目标是在项目范围内使项目名称唯一。自:items以来 表没有定义project_id外键,只需写入add_index :items, :name, unique: { scope: :project_id }将无效。我是铁杆新手,我错过了什么?如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

我认为最好的解决方案是将project_id包含到items表中,并使(project_iditem_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

您当然可以使用验证,但效果不佳。以及触发器(数据库端)。他们都假设你是唯一一个在给定时刻使用数据库的人。这并不总是正确的,并且您将以这种方式最终解决数据完整性问题。