我有说明评论的嵌套属性。父类是post。
<% form_for @post do |f| %>
...........
<% f.fields_for :comments do |builder| %>
<%= builder.text_field :name %>
<%= builder.text_field :address %>
<%= builder.hidden_field :label, :value => user_1 %>
<%= builder.text_field :name %>
<%= builder.text_field :address %>
<%= builder.hidden_field :label, :value => user_2 %>
<% end %>
<% end %>
当我保存帖子时我也想保存评论,而且我需要hidden_field的不同值,如果我使用表单标签,我不知道它如何保存评论而不在控制器中做任何事情。
我还在帖子模型中使用了:accepts_nested_attributes_for:comment。如果有人能再考虑一下,那就太棒了。
名称,地址和标签是评论的字段。当我保存帖子时,我需要保存两行注释。一个来自第一个text_field,text_field和hidden_field,另一个来自第二个输入字段。
答案 0 :(得分:1)
您创建的表单包含具有相同ID的字段。这导致HTML无效,并且所有(大多数)浏览器都无法正确处理。
您需要生成唯一的ID,以便使用FormTagHelpers。例如:
<% form_tag('/builder') %>
<%= text_field_tag ':name1' %>
<%= text_field_tag ':address1' %>
<%= text_field_tag 'name2' %>
<%= text_field_tag 'address2' %>
<% end %>
这将生成正确的HTML。现在,您需要更改控制器以处理不同的名称字段。您需要使用params[:name1]
和params[:name2]
来获取user1和user2的名称。
通过将id更改为更有用的内容(我不记得ID应该是名称atm ...),您可以为用户“分组”字段,以便您可以使用params[:user1][:name]
之类的内容这可能与你的桌子更好地匹配。
修改:您是否已查看过field_for文档?它有一些很好的模型和所需形式的例子。
答案 1 :(得分:1)
我在朋友的帮助下解决了这个问题 我的控制器中有这个代码
if @post.comments.nil?
@post.comments.build(:username => "user1")
@post.comments.build(:username => "user2")
end
并以我的形式提供
<%= form_for @post do |f| %>
<%= f.fields_for :comments do |builder| %>
<%= builder.label :username, "#{builder.object.username}" %>
<%= builder.hidden_field :username %>
<% if builder.object.username == "user1" %>
<%= builder.text_field :address, :value => "address1" %>
<% else %>
<%= builder.text_field :address, :value => "address2" %>
<% end %>
<% end %>
<%= f.submit "Create Post" %>
<%end%>
所以,当我创建帖子时,会发生两个评论,第一个是值地址:address1,用户名:user1,第二个是值地址:address2,用户名:user2在保存帖子时保存!