部分数组元素的形式

时间:2011-04-15 15:52:42

标签: ruby-on-rails arrays forms element partial

我正在创建一个项目,我有一个类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>

我现在的问题是,我希望能够动态添加我尝试用JQuery做的online_score_url个对象的输入。我尝试通过渲染部分来做到这一点: 助手/ 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 个答案:

答案 0 :(得分:1)

试试这个:

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

这是beacuse:f不是render方法的参数。因此,您需要使用:object,:collection或具有上述语法的本地语。

同样在这里:

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