在提交下面的表单时,如何更新子代“产品”行的集合。
非常感谢
class User < ActiveRecord::Base
has_many :products, :class_name => 'Product', :inverse_of => :user
accepts_nested_attributes_for :products
end
class Product < ActiveRecord::Base
belongs_to :user, :inverse_of => :products
end
视图
<%= form_for(@user) do |f| %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<%= f.fields_for :products do |builder| %>
<% builder.text_field :name %>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:0)
这里有一点update
动作:
# app/controller/users_controller.rb
def update
# Get the user in param
@user = User.find(params[:id])
# Update attributes
if @user.update_attribute(params[:user])
# Redirect to :show for this user.
redirect_to :show
else
# update_attriubtes failed. Render the edit view.
render :edit
end
end
其次,您还需要确保可以批量分配属性,以便对@user.update_attributes
的调用成功。由于您没有使用适当的Rails版本标记您的问题,因此您可以为Rails 3和Rails 4执行以下操作:
attr_accessible
params.require(:user).permit(...)
中的参数。请注意,在您的视图中,您不会在此行上输出帮助程序text_field
的结果:
<% builder.text_field :name %>
您需要使用<%=...%>
(注意等于=
符号)才能在<%=...%>
中输出表达式的结果。这可能只是一个错字,因为你已经在所有其他元素上正确地完成了这个。将行替换为:
<%= builder.text_field :name %>
另外,建议阅读指南的“Action Controller Overview”以获取有关控制器的详细信息。