1

私のアプリには、試合に賭けるユーザーがいます。シングルベットは「ティップ」と呼ばれます。

ユーザーが賭けを編集できる次の(作業中の)フォームがあります。

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

このフォームを使用すると、ユーザーは自分のすべての賭け/ヒントを一度に編集できます。

私の質問:

ユーザーが編集できるヒントを指定するにはどうすればよいですか? ユーザーがすべての賭けのリストを取得するのではなく、賭けのサブセットのみを取得することを望んでいます。

たとえば、次のようにします。

<%= 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 回に減ります。ただし、このコードは機能しません。

これを解決する正しい方法は何ですか?前もって感謝します。

4

1 に答える 1

1

私は今それをテストしていませんが、オブジェクトを に渡すことができるはずですfields_for。bo のようなものが動作するはずです:

<% 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メソッドを検索し、1 対多の関係について説明しています。ActionView::Helpers::FormHelper

于 2012-09-18T10:28:41.257 に答える