добавление функции поиска на страницу с разбивкой по страницам в RoR - PullRequest
1 голос
/ 01 апреля 2012

Вот сценарий:

У меня есть таблица, которая отображает список групп (идентификатор, название, описание и т. Д.), Как показано ниже, который разбит на страницы, а также имеет форму поиска:

<div id="navigation" style="background:white;border:1px outset cadetblue;">
<p>
  <% form_tag groups_path, :method => 'get' do %>
  <p> 
   <%= text_field_tag :search, params[:search]  %>
    <%= submit_tag "Search", :name => nil %>
   </p>
<% end %>
</p> 
</div>
<table>
.....
</table>
<%= paginate @groups %>

В моем groups_controller.rb у меня есть:

@groups = Group.search(params[:search])
@groups = Group.order("id").page(params[:page]).per(15)

, который, кажется, не работает.Нумерация страниц работает, но когда я нажимаю кнопку поиска, она ничего не делает.Функция поиска реализована в модели group.rb:

def self.search(search)
   if search
    find(:all, :conditions => ['description LIKE ?', "%#{search}%"])
   else
    find(:all)
   end
end

Как мне решить эту проблему, как заставить мою форму поиска работать и возвращать результаты в разбивке по страницам!

Ответы [ 2 ]

0 голосов
/ 01 апреля 2012

Вот окончательный ответ на этот пост.Все, что нужно было сделать оригинальному постеру, это:

@groups = Group.where("description LIKE '%#{params[:search]}%'").order('id').page(params[:page]).per(15)

В автономном обсуждении это не сработало.Оказывается, у него были ОБА will_paginate Gem и kaminari Gem для его нумерации страниц.Он был в отчаянии, когда дело дошло до .per (15).Удаление самоцвета will_paginate исправило его!

will_paginate активно не обновляется, поэтому, если у вас есть will_paginate и вы находитесь на Rails 3.X, избавьтесь от will_paginate и используйте вместо этого kaminari, это довольно безболезненная заменаПросто немного работы CSS для форматирования нумерации страниц.

0 голосов
/ 01 апреля 2012

Вам нужно объединить эти два вызова в один, прямо сейчас вы переопределяете первый параметр @groups вторым.

Я бы добавил область действия для модели вашей группы

class Group
  scope :search, lambda { |val| , find(:all, :conditions=>['description LIKE ?', "%#{val}%"]) }
end

Тогда вы можете сделать

@groups = Group.search(params[:search]).order("id").page(params[:page]).per(15)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...