Ruby on rails 强制联接模型唯一性的正确方法?(有很多:通过)
我通过我们的用户表建立了父子关系,模型如下:Ruby on rails 强制联接模型唯一性的正确方法?(有很多:通过),ruby-on-rails,activerecord,unique,has-many-through,Ruby On Rails,Activerecord,Unique,Has Many Through,我通过我们的用户表建立了父子关系,模型如下: class User < ActiveRecord::Base # Parents relationship has_many :children_parents, :class_name => "ParentsChild", :foreign_key => "child_id", :dependent => :destroy has_many :parents, :through => :children
class User < ActiveRecord::Base
# Parents relationship
has_many :children_parents, :class_name => "ParentsChild", :foreign_key => "child_id", :dependent => :destroy
has_many :parents, :through => :children_parents
# Children relatiopnship
has_many :parents_children, :class_name => "ParentsChild", :foreign_key => "parent_id", :dependent => :destroy
has_many :children, :through => :parents_children
...
end
class用户“ParentsChild”、:foreign\u key=>“child\u id”、:dependent=>:destroy
有很多:父母,:通过=>:孩子\u父母
#儿童关系
有多个:父项\u子项,:class\u name=>“ParentsChild”,:foreign\u key=>“parent\u id”,:dependent=>:destroy
有很多:孩子,:通过=>:父母\u孩子
...
结束
在parents_child.rb中:
class ParentsChild < ActiveRecord::Base
belongs_to :parent, :class_name => "User"
belongs_to :child, :class_name => "User"
end
类ParentsChild(parent\u id,child\u id)
上使用唯一索引(当然使用迁移),但我不确定强制ParentsChild关系唯一性的“正确”方法是什么
我确信我也可以在UsersController::update方法中强制实施唯一性约束,但如果可能的话,我更愿意避免更改该代码(由于表单/模型中的嵌套属性,现在它根本不引用父/子代码)。我最关心的是确保我们使用“适当”的解决方案。“正确”或“rails”的方法是什么?使用has\u many:through,可以指定:uniq作为选项,如下所示:
has_many :parents, :through => :children_parents, :uniq => true
肯定应该先考虑最简单的解决方案。谢谢对我花了这么长时间来摆弄它,您的答案正是我所需要的。或者在rails 4中,
有很多:父项,>{uniq},:通过=>:children\u父项
值得注意的是,这并没有停止在联接表中创建重复记录,但它确实返回uniq记录,我得到弃用警告:uniq已弃用,将从Rails 5.1中删除(改用distinct)