Форма для элемента массива в частичном

Я делаю проект, для которого у меня есть класс online_score, одним из атрибутов которого является массив с именем url из online_score_url объектов. То, что я сделал до сих пор, заключается в следующем. просмотры/онлайн_оценка/новый:

<div class="urlInput">    
<% f.fields_for :url do |b| %>
<%= render "online_score_url_fields", :f => b %>
<% end %>
<%= add_url_link "Add Another link", f %>
</div>

views/online_score/_online_score_url_fields:

<div class="inputset">
<%= f.label :url %>  <%= f.url_field :url, :value => "http://www.google.be"%>
<%= f.label :description %>  <%= f.text_field :description %>
<%= link_to_remove_fields "remove", f %>
</div>

Теперь моя проблема в том, что я хочу иметь возможность динамически добавлять входные данные для online_score_urlobjects, которые я пытаюсь сделать с помощью JQuery. Я пытаюсь сделать это, визуализируя партиал следующим образом: helpers/online_scores_helper.rb:

def add_url_link(name, form)
  link_to_function name do |page|    
  online_score_url = render(:partial => 'online_score_url_fields', :f => form )
  page << %{
    $('.links').append("#{ escape_javascript online_score_url }");
  }
  end
end

Проблема в том, что f кажется неопределенным в партиале. Я ожидаю, что это как-то связано со строкой <% f.fields_for :url do |b| %>, которая, на мой взгляд, не выполняется с помощью динамического добавления. Но я действительно не знаю, как исправить. Думаю, мне нужна альтернатива методу form_for? Как это сделать?

Я предполагаю, что мой главный вопрос: как мне перебирать массив контролируемым образом и для каждого элемента создавать набор форм ввода, как в частичном, И иметь возможность «добавлять» одну или несколько динамически?

Спасибо за ваше время.


person KarelV    schedule 15.04.2011    source источник


Ответы (1)


Попробуй это:

<%= render "online_score_url_fields", :locals => {:f => b} %>

это потому, что :f не является параметром для метода рендеринга. Поэтому вам нужно использовать :object, :collection или что-то локальное с синтаксисом выше.

Тут то же самое:

online_score_url = render(:partial => 'online_score_url_fields', :locals => {:f => form} )
person Matteo Alessani    schedule 15.04.2011
comment
дает undefined method description' для #‹OnlineScore:0x00000004d69e90›` частично, вызванным помощником. Сейчас пробую что-то другое, буду держать вас в курсе. - person KarelV; 15.04.2011
comment
Моя проблема немного изменилась, поэтому я задал новый вопрос: stackoverflow.com/questions/5685325/ - person KarelV; 16.04.2011