Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby On Rails > paginate


Автор: Лена 14.10.2009, 12:55
Не могу найти у себя ошибку. Реализован простой поиск:
Код

<% form_tag :action => :find_tovar, :method => 'get' do  %>
 <table cellpadding="0" cellspacing="0">  
  <tr><td>
  <label for ="title">Поиск:</label><td/><td></td><tr>
  <tr><td>
  <%= text_field_tag :title, '', :size=>15 %><td/><td>
  <%= image_submit_tag("find.png") %>
  </td><tr>
 </table>
 <% end %>



Код

def find_tovar
     
     param = params[:title] 
      if param.empty?
        redirect_to_index("Введите название товара")
      end
      @tovary = Product.find(:all, :conditions => ["title like ?", "#{param}%"], :order => 'title')
       if @tovary.empty?
         redirect_to_index("Указанного товара нет") 
       end
#показать find_tovar.rhtml


   #@product_pages2, @tovary = paginate :products, :per_page => 10, :order => 'title'
end



Все работает. Ввожу, например букву D и получаю свои два товара. Товаров на эту букву действительно два в базе.
Но я хочу добавить на будущее разбитие найденных товаров на странице по 10 штук. Когда я убираю комментарий:
@product_pages2, @tovary = paginate :products, :per_page => 10, :order => 'title'

все перстает работать. Я получаю список всех товаров по 10 штук. Как правильно разбивать найденные товары по 10 штук на странице?

Автор: source777 16.10.2009, 10:47
Цитата(Лена @  14.10.2009,  12:55 Найти цитируемый пост)
@product_pages2, @tovary = paginate :products, :per_page => 10, :order => 'title'

и где тут conditions?

Автор: Лена 16.10.2009, 15:25
Видимо я совсем не понимаю метод paginate. smile 
Я рассуждала так, строка:
@tovary = Product.find(:all, :conditions => ["title like ?", "#{param}%"], :order => 'title')
Заносит в переменную @tovary все, что мне нужно.
Строка:
@product_pages2, @tovary = paginate :products, :per_page => 10, :order => 'title'
Разбивает это все по 10 штук на страницах.

Значит, получается так, если написать:
@product_pages2, @tovary = paginate :products, :per_page => 10, :conditions => ["title like ?", "#{param}%"], :order => 'title'
То все заработает?
Ну а тогда строка:
@tovary = Product.find(:all, :conditions => ["title like ?", "#{param}%"], :order => 'title')
нужна вообще или нет?


Автор: source777 19.10.2009, 13:10
Цитата(Лена @  16.10.2009,  15:25 Найти цитируемый пост)
Строка:
@product_pages2, @tovary = paginate :products, :per_page => 10, :order => 'title'
Разбивает это все по 10 штук на страницах.

У тебя же тут @tovary слева от присваивания, так что логика явно другая, по идее метод должен ещё номер текущей страницы принимать, хотя я больше привык пользоваться SearchLogic и will_paginate.


Цитата(Лена @  16.10.2009,  15:25 Найти цитируемый пост)
Ну а тогда строка:
@tovary = Product.find(:all, :conditions => ["title like ?", "#{param}%"], :order => 'title')
нужна вообще или нет?

Нет, не нужна.

Автор: Лена 22.10.2009, 13:34
Cпасибо, все понятно и все работает. smile 

Автор: source777 22.10.2009, 14:27
Рад помочь, не забывай помечать тему решённой. См. справа от заголовка темы ссылку "Пометить как решённый"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)