加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 在连接模型上强制唯一性的正确方法? (has_man

发布时间:2020-12-17 03:19:20 所属栏目:百科 来源:网络整理
导读:我通过users表拥有父/子关系,模型如下: class User ActiveRecord::Base # Parents relationship has_many :children_parents,:class_name = "ParentsChild",:foreign_key = "child_id",:dependent = :destroy has_many :parents,:through = :children_paren
我通过users表拥有父/子关系,模型如下:

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,:foreign_key => "parent_id",:dependent => :destroy
  has_many :children,:through => :parents_children
  ...
end

在parents_child.rb中:

class ParentsChild < ActiveRecord::Base

  belongs_to :parent,:class_name => "User"
  belongs_to :child,:class_name => "User"

end

现在,我们的“添加子项”表单(仅使用vanilla嵌套属性)可以为父项多次添加同一个用户.虽然我倾向于在数据库层(使用迁移当然)的(parent_id,child_id)上的唯一索引,但我不确定在ParentsChild关系中强制实现唯一性的“正确”方法是什么.

我确信我还可以在UsersController :: update方法中强制执行唯一性约束,但是更愿意避免更改该代码(现在它完全不引用父/子,这要归功于表单/模型中的嵌套属性)可能.我最关心的是确保我们使用“正确”的解决方案.什么是’正确’或’轨道’的方式来做到这一点?

解决方法

使用has_many:through,您可以指定:uniq作为选项,如下所示:

has_many :parents,:through => :children_parents,:uniq => true

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读