Rails 2.3: Как получить доступ к отношениям модели, когда hsing fields_for и: accepts_nested_attributes_for - PullRequest
1 голос
/ 14 января 2010

ОК, поэтому отношения таковы: в программе много: событий И каждое Событие принадлежит Организатору (who has_many: events)

В форме для программирования / редактирования я хотел бы перечислить связанные события, и с каждой из этих записей также иметь доступ к каждому Организатору, чтобы я мог сделать что-то вроде:

текстовое поле (event.name) | текстовое поле (event.date) | этикетка (event.organizer.name)

Итак ...

<% form_for([:admin, program]) do |f| %>

...

  <h3>Event Data Fields</h3>
    <table>
     <% f.fields_for :events do |event_form| %>
  <tr class="line_item">
    <td><%= event_form.text_field :name %></td>
    <td><%= event_form.text_field :date %></td>
    <td><%= event_form.text_field "organizer.name", :disabled=>true %></td>

  </tr>


      <% end %>
    </table>
    <p><%= f.submit "Submit" %></p>
<% end %>

Очевидно, event_form.text_field "organizer.name" не будет работать, но это концепция

Ответы [ 3 ]

2 голосов
/ 14 января 2010

Почему бы просто не использовать поля для? ...

<% form_for([:admin, program]) do |f| %>

...

  <h3>Event Data Fields</h3>
  <table>
     <% program.events.each do |event| %>
       <% f.fields_for event do |event_form| %>
  <tr class="line_item">
    <td><%= event_form.text_field :name %></td>
    <td><%= event_form.text_field :date %></td>
    <% event_form.fields_for(:organizer) do |organizer_form| %>
      <td><%= organizer_form.text_field :name, :disabled=>true %></td>
    <% end %>
  </tr>
       <% end %>
     <% end %>
   </table>
   <p><%= f.submit "Submit" %></p>
<% end %>
0 голосов
/ 14 января 2010

Вы можете сделать это, как указано halogenandtoast , но если вы хотите только показать это поле, вы также можете сделать это так:

Вместо:

<td><%= event_form.text_field "organizer.name", :disabled=>true %></td>

положить:

<td><%= event_form.object.organizer.name %> </td>

Когда вы добавляете object в построитель форм, он ссылается на обработанный объект, поэтому вы можете получить доступ к его атрибутам.

0 голосов
/ 14 января 2010

Помощники Rails работают, только если вы работаете с одним объектом за раз. Если вы хотите обновить атрибуты других записей одновременно, вам необходимо использовать text_field_tag ​​для этих полей и включить пользовательскую логику в контроллер для интерпретации / сохранения этих данных. ИМХО, это далеко не лучшая практика.

Альтернативные решения включают использование встроенного редактирования AJAX или, если идея заключается в возможности связывать организаторы с событиями при редактировании, использовать поле выбора.

Однако, если организаторы настолько тесно связаны с событиями в вашем домене, что вы захотите редактировать их поля одновременно, почему бы просто не указать имени организатора в вашем объекте события? По крайней мере, это был бы мой инстинкт, не зная больше о вашей объектной модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...