2010-02-11 3 views
0

Я работаю с will_paginate для создания сортируемой и доступной для поиска таблицы. У меня есть все, чтобы работать правильно, за исключением окна поиска (фильтра). Прямо сейчас, когда я выбираю другой запрос (кроме «title») и что-то ищу, он ищет только запросы заголовков. Может ли кто-нибудь помочь указать, где я ошибаюсь?Фильтрация таблицы в рельсах

Спасибо!

контроллер индекс:

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

Попробуйте также установить значения для переменной. значения = {: filter = filter} условие = ": фильтр LIKE?", Params [: query] – Steve

+0

Хмм, я не уверен, знаю ли вы, что вы имеете в виду, задав мои значения. Я получил этот код с другого сайта ... Я не так хорош с рубином ... Я могу обойтись и понять большую часть этого, но это меня сбивает с толку. Если фильтр имеет размер, я хочу запросить его на основе размера и так далее. –

Смежные вопросы