我有两个模型,竞赛和提交。提交belongs_to 比赛和比赛has_many 提交。
在提交的索引操作中,我进行了搜索:
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
我认为传递它的正确方法是通过提交>索引视图中的搜索表单:
<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="✓" /></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”,这是控制器需要找到一个比赛。我在搜索中遇到的问题是找到正确的语法来让 match_id=5 出现,而不会被笨拙的庞然大物搞砸。