Форма для элемента массива в частичном - PullRequest
2 голосов
/ 15 апреля 2011

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

<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>

просмотров / 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_url объектов, которые я пытаюсь сделать с JQuery. Я пытаюсь сделать это путем рендеринга частичного следующим образом: хелперы / 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? Как это сделать?

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

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

1 Ответ

1 голос
/ 15 апреля 2011

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

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

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

То же самое здесь:

online_score_url = render(:partial => 'online_score_url_fields', :locals => {:f => form} )
...