0

コンテストとサブミッションの 2 つのモデルがあります。提出物はコンテストに属し、コンテストには多くの提出物があります。

提出物のインデックスアクションで、検索があります:

def index
   contest_id = params[:contest_id]
   @contest = Contest.find(contest_id)
   if params[:search].blank?
      @submissions = Submission.paginate(:per_page => 10, :page => params[:page])
   else
      @submissions = Submission.search(params[:search]).paginate(:per_page => 10, :page => params[:page])
   end
      @search = params[:search] 
end

それを渡す正しい方法は、submissions>index ビューの検索フォームを使用することだと思います。

<div class ="span12 row">
    <%= form_tag submissions_path, :method => 'get', :class => "form-search pull-right" do %>
    <%= text_field_tag :search, params[:search], :class => 'input-xlarge', :placeholder => 'Search by member, title or description' %>
    <%= submit_tag "Search", :title => nil, :class => 'btn btn-primary' %>
<% end %>
</div>

そして、私はこれを使って近づくことができました:

<%= hidden_field :contest_id, @contest.id %>

フォームでは、しかしそれはURLでこれを返しています:

http://localhost:3000/submissions?utf8=%E2%9C%93&search=test&contest_id%5B%5D=&commit=Search

そしてエラー:

Couldn't find Contest with id=

私もこれを試しました:

<%= hidden_field(:contest_id, :value => @contest.id ) %>

しかし、同様のURLとエラーを返しています。

今、私は立ち往生しています。ご不明な点がございましたら、お知らせください。

[編集 - html を追加]

検索前:

<div class ="span12 row">
    <form accept-charset="UTF-8" action="/submissions" class="form-search pull-right" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /></div>
       <input class="input-xlarge" id="search" name="search" placeholder="Search by member, title or description" type="text" />
       <input id="contest_id_5" name="contest_id[5]" type="hidden" />
       <input class="btn btn-primary" name="commit" type="submit" value="Search" />
    </form>
</div>

送信に行く他のリンクからの動作は次のとおりです。

提出ショーページから:

<%= link_to 'Browse All Submissions', submissions_path(:contest_id => @contest.id), :class => 'btn btn-mini pull-right' %>` 

そしてコンテストショーページから:

<%= link_to 'Browse All Submissions', submissions_path(:contest_id => @contest.id), :class => 'btn btn-mini pull-right' %>

これらはどちらも、コントローラーがコンテストを見つけるために必要な URL "contest_id=5" を渡します。私が検索で抱えている問題は、contest_id=5 を取得するための正しい構文を見つけることです。

4

1 に答える 1

0

これは簡単な解決策であることが判明しました。検索フォームにhidden_​​field_tagを挿入します。

<%= hidden_field_tag 'contest_id', @contest.id %>

これにより、正しい値がparamsに渡されます。

 http://localhost:3000/submissions?utf8=%E2%9C%93&search=new&contest_id=5&commit=Search
于 2012-12-14T20:26:31.770 に答える