Ruby on rails Rails—如何在同一个表中的对象之间创建关系
我正在创建一个家庭相册应用程序。用户可以登录并创建“家庭”对象。创建族对象后,用户可以使用“成员”填充族。应用程序允许您创建一个成员作为独立对象。创建第一个成员后,必须从现有成员的显示页面创建所有后续成员。创建成员时,要创建的成员需要确定它与当前成员的关系(显示页面)。关系应为“父母”、“子女”或“兄弟姐妹” 我很难弄明白怎么做。解决方案需要完成以下两项工作:Ruby on rails Rails—如何在同一个表中的对象之间创建关系,ruby-on-rails,Ruby On Rails,我正在创建一个家庭相册应用程序。用户可以登录并创建“家庭”对象。创建族对象后,用户可以使用“成员”填充族。应用程序允许您创建一个成员作为独立对象。创建第一个成员后,必须从现有成员的显示页面创建所有后续成员。创建成员时,要创建的成员需要确定它与当前成员的关系(显示页面)。关系应为“父母”、“子女”或“兄弟姐妹” 我很难弄明白怎么做。解决方案需要完成以下两项工作: 创建新“成员”时,两个对象都将有新关系的记录 需要指定关系的类型。它不能只是“成员”属于“成员”。它必须是“成员”#1是“成员”#2的父
create_table "members", force: :cascade do |t|
t.string "first_name"
t.string "last_name"
t.string "birthplace"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "family_id"
t.integer "parent_id"
t.integer "child_id"
t.integer "sibling_id"
end
我还没有在会员之间建立很多关系。创建新成员时,我只需使该新成员的“父id”或“子id”或“兄弟id”等于当前显示成员的id(同样,表单位于成员显示页面中)
父母亲
在我看来,这是一种非常愚蠢的方法。理想情况下,我希望有一组单选按钮,上面写着“家长”、“兄弟姐妹”和“孩子”。用户必须单击其中一个按钮,但只能单击其中一个。提交表单时,将根据单击的单选按钮建立当前成员和新成员之间的关系。我当前的策略根本不更新当前成员。该关系只能在一个方向上引用。此方法还需要选择其他成员。。。这不是我想要的
我应该使用has_多通表吗?救命啊 您确实应该使用
has\u many\u to
,因为我认为您需要支持多种关系。。。一个父级可以有多个子级,因此在父级中有子级\u id
不足以处理这种情况
class Member < ApplicationRecord
has_many :parent_links, class_name: 'ParentChildLink', foreign_key: :child_id
has_many :parents, through: :parent_links, class_name: 'Member', foreign_key: :parent_id
has_many :child_links, class_name: 'ParentChildLink', foreign_key: :parent_id
has_many :children, through: :parent_links, class_name: 'Member', foreign_key: :child_id
end
类成员
“父子链接”表将具有
class ParentChildLink < ApplicationRecord
belongs_to :parent, class_name: 'Member', foreign_key: :parent_id
belongs_to :child, class_name: 'Member', foreign_key: :child_id
end
class ParentChildLink
现在通过rails的魔力你可以做到
tommy = Member.create(name: 'Tommy')
peter = Member.create(name: 'Peter')
peter.children << tommy
tommy=Member.create(名称:“tommy”)
peter=成员。创建(名称:“peter”)
peter.children您确实应该使用has\u many\u to
,因为我认为您需要支持多种关系。。。一个父级可以有多个子级,因此在父级中有子级\u id
不足以处理这种情况
class Member < ApplicationRecord
has_many :parent_links, class_name: 'ParentChildLink', foreign_key: :child_id
has_many :parents, through: :parent_links, class_name: 'Member', foreign_key: :parent_id
has_many :child_links, class_name: 'ParentChildLink', foreign_key: :parent_id
has_many :children, through: :parent_links, class_name: 'Member', foreign_key: :child_id
end
类成员
“父子链接”表将具有
class ParentChildLink < ApplicationRecord
belongs_to :parent, class_name: 'Member', foreign_key: :parent_id
belongs_to :child, class_name: 'Member', foreign_key: :child_id
end
class ParentChildLink
现在通过rails的魔力你可以做到
tommy = Member.create(name: 'Tommy')
peter = Member.create(name: 'Peter')
peter.children << tommy
tommy=Member.create(名称:“tommy”)
peter=成员。创建(名称:“peter”)
peter.children我当前的方法根本不更新当前成员
您在谈论哪种方法?为什么它不工作,没有任何错误或验证?也分享你的模型我不是指文字方法。我只是指我的策略。很抱歉糟糕的措辞。我当前的方法根本不更新当前成员
你说的是哪种方法?为什么它不工作,没有任何错误或验证?也分享你的模型我不是指文字方法。我只是指我的策略。很抱歉糟糕的措辞。这很有帮助!我该如何处理表单方面的问题?我仍在学习如何利用这种关系。非常感谢。这很有帮助!我该如何处理表单方面的问题?我仍在学习如何利用这种关系。非常感谢。