我有三个型号:嵌套模型形式
class Rate < ActiveRecord::Base
attr_accessible :user_id, :car_id, :rate
belongs_to :user
belongs_to :car
end
class User < ActiveRecord::Base
attr_accessible :name
has_many :rates
accepts_nested_attributes_for :rates
end
class Car < ActiveRecord::Base
attr_accessible :name
has_many :rates
accepts_nested_attributes_for :rates
end
和一个控制器:
class UsersController < ResourceController
def new
# Assume user is loaded
@user.rates.build
end
end
我试图建立一个嵌套形式,将列表关联用户/汽车及其相关费率。
喜欢的东西:
<% form_for @user do |f| %>
<%= @user.name %><br />
<% Car.all.each do |car| %>
<%= car.name %><br />
<%= f.fields_for :rates do |r| %>
<%= r.number_field :rate %>
<% end %>
<% end %>
<% end %>
的问题是,我想率模型来存储数据如下:
USER_ID CAR_ID RATE
1 1 10
1 2 20
1 3 30
2 1 40
3 2 50
我无法弄清楚如何才能正确地构建fields_for
帮手建user_id
和car_id
的适当参数。
喜欢的东西:
user[car=1][rate]
user[car=2][rate]
我已经试过与所述fields_for
这样更加明确:
<%= r.fields_for 'user[car][rate]' %>
但它仍然没有打造出来的嵌套参数正常。汽车参数未正确识别。
任何帮助,将不胜感激!谢谢。
编辑: 控制器的操作必须在用户之下。为简洁起见,上面的示例缩短了,但其他与用户相关的属性可通过表单获得,因此必须使用用户控制器。
答案: 我想出了一个办法。我有added my own answer解释它。
我应该添加到原来的问题。该表单与用户共享其他属性,而不仅仅是费率。为了简洁,我缩短了它。它必须在用户控制器下。我会更新原来的问题。 – 2013-02-28 03:17:33
不用了解细节,我的第一印象是混合更新用户属性和添加费率是不合逻辑的。一种形式需要太多关注。不同的行为有不同的形式,增加率是增加率,更新的形式是更新形式。 – 2013-02-28 03:25:39
这是可能的。我已经添加了我自己的答案,就如何解决它。 – 2013-02-28 19:27:20