2010-02-11 37 views
0

我正在使用will_paginate来创建可排序和可搜索的表格。除了搜索框(过滤器)外,我已将所有内容都正确地工作。现在,当我选择不同的查询(除“title”以外)并搜索某些内容时,它只搜索标题查询。任何人都可以帮助指出我出错的地方吗?在Rails中过滤表格

谢谢!

指数控制器:

filter = case params['sform'] 
    when "filter=Title" then "title" 
    when "filter=Size" then "size" 
    when "filter=Film Type" then "film_type" 
    when "filter=Premiere" then "premiere" 
    when "filter=Preferred Date" then "preferred_date" 
    when "filter=Actual Date" then "actual_date" 
end 


sort = case params['sort'] 
     when "title" then "title" 
     when "premiere" then "premiere" 
     when "film_type" then "film_type" 
    when "preferred_date" then "preferred_date" 
    when "actual_date" then "actual_date" 
    when "created_at" then "created_at" 
    when "updated_at" then "updated_at" 
     when "size" then "size" 
     when "title_reverse" then "title DESC" 
     when "premiere_reverse" then "premiere DESC" 
     when "film_type_reverse" then "film_type DESC" 
    when "preferred_date_reverse" then "preferred_date DESC" 
    when "actual_date_reverse" then "actual_date DESC" 
    when "created_at_reverse" then "created_at DESC" 
    when "updated_at_reverse" then "updated_at DESC" 
     when "size_reverse" then "size DESC" 

     end 

conditions = ["title LIKE ?", "%#{params[:query]}%"] unless params[:query].nil? 

@total = Video.count(:conditions => conditions) 
@videos = Video.paginate :page => params[:page], :per_page => 100, :order => sort, :conditions => conditions 
if request.xml_http_request? 
    render :partial => "video_list", :layout => false 
end 

索引视图:

<form name="sform" action="" style="display:inline;"> 
<br> 
<label for="item_name">Search by <%= select_tag "filter", "<option>Title</option>,<option>Size</option>,<option>Film Type</option>,<option>Premiere</option>,<option>Preferred Date</option>,<option>Actual Date</option>" %>: </label> 
<%= text_field_tag(:query, params['query'], :size => 10, :id => 'query') %> 

</form> 

<%= image_tag("spinner.gif", 
       :align => "absmiddle", 
       :border => 0, 
       :id => "spinner", 
       :style =>"display: none;") %> 
</p> 

<%= observe_form 'sform', :frequency => 1, 
     :update => 'table', 
     :before => "$('#spinner').show()", 
     :success => "$('#spinner').hide()", 
     :url => {:action => 'list'}, 
     :with => 'sform' %> 


<div id="table"> 
<%= render :partial => "video_list" %> 
</div> 

还是无法弄清楚如何能让它在过滤器类型进行搜索。还有什么建议?

回答

0

在最后部分有:

conditions = ["title LIKE ?", "%#{params[:query]}%"] unless params[:query].nil? 

你传递明确的条件按标题搜索。这是你想要做的吗?

+0

尝试将您的值设置为变量。 values = {:filter = filter} condition =“:filter LIKE?”,params [:query] – Steve 2010-02-11 06:09:36

+0

嗯我不知道我是否知道你的意思是设置我的值。我从另一个网站上得到了这段代码......我对ruby还不太了解,但我可以避开并理解它的大部分内容,但是这让我感到困惑。如果过滤器是大小,那么我想根据大小等进行查询。 – 2010-02-11 14:33:25