Ruby on Rails - 嵌套表单

时间:2012-09-18 10:21:35

标签: ruby-on-rails

我的应用有投注匹配的用户。单个赌注称为“tipp”。

我有以下(工作)表格,用户可以编辑他们的赌注:

<%= form_for @user, :url => { :action => "update_tipps" }  do |user_form| %>

    <%= user_form.fields_for :tipps do |tipp_form, index| %>
        <%= tipp_form.text_field :tipp1 %><br/>
        <%= tipp_form.text_field :tipp2 %><br/>         
    <% end %>

    <%= submit_or_cancel(user_form) %> 
<% end %>

使用此表单,用户可以立即编辑所有下注/ tipp。

我的问题:

如何指定用户可以编辑的tipp?我不希望用户获得他所有赌注的列表,而只是他下注的一部分。

例如:

<%= user_form.fields_for :tipps.where("match_id = ?", 5) do |tipp_form, index| %>
    <%= tipp_form.text_field :tipp1 %><br/>
    <%= tipp_form.text_field :tipp2 %><br/>         
<% end %>

这会将赌注减少到ID为5的匹配。此代码无效。

解决这个问题的正确方法是什么?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我现在还没有测试过,但你应该能够将对象传递给fields_for,这样的事情应该可行:

<% user_form.object.tipps.where("match_id = ?", 5).each do |tipp| %>
  <%= user_form.fields_for :tipps, tipp do |tipp_form, index| %>
    <%= tipp_form.text_field :tipp1 %><br/>
    <%= tipp_form.text_field :tipp2 %><br/>         
  <% end %>
<% end %>

当然你应该重构它,因为在视图中像这样(低级搜索方法)的过滤是难闻的气味,但最后你有一些东西要开始玩。

http://api.rubyonrails.org进行了描述,在fields_for中搜索了ActionView::Helpers::FormHelper方法,并在嵌套属性示例中描述了一对多关系。