Как отображать только имя связанной записи в rails 3.1.0

В нашем приложении rails 3.1.0 есть rfq, quote и test_item. RFQ содержит множество предложений и тестовых заданий. Цитата относится к запросу предложений и содержит множество тестовых заданий. Тестовый элемент имеет много запросов предложений и цитат.

При создании предложения элементы теста в запросе запроса передаются непосредственно в новую форму предложения. Вот код в новом контроллере в кавычках:

  @quote = @rfq.quotes.new()
  @quote.test_items << @rfq.test_items

Вот код представления в новой форме цитаты для отображения тестовых элементов, переданных из rfq:

<%= simple_form_for([@rfq, @quote]) do |f| %>    
....        
  <% @quote.test_items.each do |t| %>   
    <p><%= f.association :test_items, :label => false %><%= link_to_remove_fields "remove", f %></p> 
  <% end %> 
....  
<% end %> 

Приведенный выше код представления может отображать тестовый элемент, переданный из запроса запроса, и поддерживать ассоциацию (в цитате много тестовых элементов), что и нужно приложению. Однако он также отображает поле выбора для тестового элемента, который здесь не нужен (невозможно изменить тестовый элемент в кавычках, кроме как удалить. Также t в цикле не был полезен). Нам нужно только отобразить название тестовых элементов, сохранить ассоциацию (в цитате много тестовых элементов) и разрешить удаление тестового элемента (сделано с помощью link_to_remove_fields).

Есть ли чистый способ сделать это? Большое спасибо.


person user938363    schedule 01.02.2012    source источник


Ответы (1)


Взгляните на механизм вложенных атрибутов в Rails. Для этого требуется как объявление модели, accepts_nested_attributes_for, так и поддерживается fields_for помощники форм, которые также совместимы с simple_forms simple_fields_for.

Я думаю, ваша ошибка заключается в том, что вы явно перебираете test_items и вызываете f.assocation, который сообщает форме, что вы хотите выбрать другой test_item. Я думаю, что вы пытаетесь позволить пользователю удалить test_items с помощью флажка. Вам нужно будет использовать fields_for для неявного цикла по списку test_items и использовать вложенные_атрибуты для разрешения удаления.

person Wolfram Arnold    schedule 02.02.2012
comment
Пробовал использовать simple_fields_for перед ассоциацией, как-то не получилось. - person user938363; 02.02.2012