使用accepts_nested_attributes_for编辑模型的问题

时间:2011-11-19 16:14:07

标签: ruby-on-rails ruby-on-rails-3 activerecord model associations

我有三个模特 - 一个穿着者,一个收件人和一个礼物,

捐赠者模型 - has_one:收件人,belongs_to:gift,accepts_nested_attributes_for,:recipient,accepts_nested_attributes_for:gift

收件人模型 - belongs_to:donor

礼品模型 - has_many:捐赠者

当用户在展示页面上时 - / donor / 1 - 我希望能够编辑收件人并添加礼物。他们正在从一种形式编辑所有三个模型。

我在控制器中的show动作是提供一个表单,通过@recipient = @ donor.build_recipient向该表单上的donar添加一个recaient - 我在视图中设置了表单。这有效!

但是我试图允许用户使用 -

通过选择框将预先存在的礼物附加到用户
<%= select(:gift, :gift_id, Gift.all.collect {|p| [ p.name, p.id ] },  {:prompt => 'Select gift'}) %>

这会显示一个包含表格中列出的所有礼物的选择框。

当我提交表格时,我可以编辑捐赠者的详细信息,添加收件人,但礼品模型(或捐赠者与礼品的关系)根本不会更新。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我相信你需要这样的东西:

<% form_for @donor do |f| %>

  ...

  <% f.select :gift_id, Gift.all.map{ |p| [p.name, p.id] } %>

  ...

<% end %>

在这种情况下,不需要accepts_nested_attributes_for :gift,因为您从可用的列表中选择礼物,而不是以捐赠者的形式创建礼物。