我的应用有投注匹配的用户。单个赌注称为“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的匹配。此代码无效。
解决这个问题的正确方法是什么?提前谢谢。
答案 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
方法,并在嵌套属性示例中描述了一对多关系。