Фильтрация таблицы в Rails

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

Спасибо!

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

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>

До сих пор не могу понять, как заставить его искать по типу фильтра. Есть еще предложения?


person Trevor Nederlof    schedule 11.02.2010    source источник


Ответы (1)


В последней части есть:

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

Условия, которые вы передаете явно, ищутся по заголовку. Это то, что вы хотите сделать?

person Steve    schedule 11.02.2010
comment
Попробуйте также установить свои значения в переменную. values ​​= { :filter = filter } условие = :filter LIKE ?, params[:query] - person Steve; 11.02.2010
comment
Хм, я не уверен, знаю ли я, что вы подразумеваете под установкой моих значений. Я получил этот код с другого веб-сайта... Я еще не очень хорошо разбираюсь в рубине... Я могу обойти и понять большую часть этого, но это меня смущает. Если фильтр имеет размер, я хочу сделать запрос на основе размера и так далее. - person Trevor Nederlof; 11.02.2010