我正在创建一个家庭相册应用程序。用户可以登录并创建一个“家庭”对象。一旦创建了家庭对象,用户就可以用“成员”填充家庭。该应用程序允许您将一个成员创建为独立对象。第一个成员创建后,所有后来的成员必须从现有成员的显示页面创建。当它们被创建时,被创建的成员需要确定它与当前成员(展示页面)的关系。关系应该是'父母','孩子'或'兄弟姐妹'。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
我还没有建立会员之间的关系的has_many还。当创建一个新的成员,我只是让新成员的“PARENT_ID”或“child_id”或“sibling_id”等于当前成员的ID被显示(再次,形式为会员展示页)
<%= form_for [@family, @new] do |m| %>
<div class="form-group">
<%= m.text_field :first_name, placeholder: "First Name", class: 'form-control' %>
</div>
<div class="form-group">
<%= m.text_field :last_name, placeholder: "Last Name", class: 'form-control' %>
</div>
<div class="form-group">
<%= m.text_field :birthplace, placeholder: "Birthplace", class: 'form-control' %>
</div>
<div class="form-group">
<label>Parent</label>
<%= m.select :child_id, @members.collect { |m| [ m.full_name, m.id ] }, include_blank: true %>
</div>
<div class="form-group">
<%= m.submit "Add", class:"btn btn-primary" %>
</div>
<% end %>
这是一个非常愚蠢的方式来做到这一点。理想情况下,我想拥有一组单选按钮,可以说“父母”,“兄弟”和“孩子”。用户必须点击其中一个按钮,但只能点击其中一个按钮。当表单被提交时,当前成员和新成员之间的关系根据单击哪个单选按钮来建立。我目前的策略根本不更新当前成员。这种关系只能在一个方向上引用。这种方法还需要选择其他成员......这不是我想要的。
我应该通过表使用has_many吗?帮帮我!
'我现在的方法不更新当前成员在所有'你谈论哪种方法?为什么它不起作用,有任何错误或验证?也分享你的模型 –
我不是一个文字方法。我只是指我的策略。抱歉。措辞不佳。 –