1

我有嵌套属性用于说评论。父类是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,另一个来自第二个输入字段。

4

2 回答 2

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]andparams[:name2]来获取 user1 和 user2 的名称。

通过将 id 更改为更有用的东西(我不记得 id 应该如何命名 atm...),您可以为用户“分组”字段,以便您可以使用params[:user1][:name]可能与您的表更好匹配的东西。

编辑:您是否已经看过field_for文档?它有一些很好的模型示例和所需的表格。

于 2011-01-31T12:16:25.453 回答
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%>

所以,当我创建帖子时会发生什么,两条评论第一个值为地址:地址1,用户名:user1,第二个值为地址:地址2,用户名:用户2在保存帖子时被保存!

于 2011-02-18T06:29:16.043 回答