сохранение значений с помощью nested_attributes на ruby - PullRequest
1 голос
/ 31 января 2011

У меня есть вложенные атрибуты для комментария. Родительский класс - 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: комментарий в модели поста. Если бы кто-нибудь мог подумать об этом, это было бы здорово.

имя, адрес и метка - это поля комментария. Когда я сохраняю сообщение, мне нужно сохранить два ряда комментариев. Один из первых полей text_field, text_field и hidden_field, а другой - из вторых полей ввода.

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Я исправил это с помощью моего друга, у меня есть этот код в моем контроллере

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-го с значением адреса: адрес1, имя пользователя: user1 и 2-го с значением адреса: адрес2, имя пользователя: user2 сохраняется при сохранении сообщения!

1 голос
/ 31 января 2011

Вы создаете форму, которая имеет поля с одинаковыми идентификаторами.Это приводит к неверному HTML и некорректно обрабатывается всеми (большинством) браузерами.

Вам необходимо создать уникальные идентификаторы, чтобы использовать 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], чтобы получить имя пользователя1 и пользователя 2.

Изменив идентификаторы на что-то более полезное (я не помню по голове, как идентификаторы должны быть именами atm...) вы можете 'сгруппировать' поля для пользователей, чтобы вы могли использовать что-то вроде params[:user1][:name], которое может лучше соответствовать вашей таблице.

Редактировать : у вас уже былопосмотрите документацию field_for ?Здесь есть несколько хороших примеров моделей и необходимых форм.

...