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


Автор: Лена 21.12.2009, 11:59
Научите, как установить will_paginate. Беру инструкцию отсюда: http://wiki.github.com/mislav/will_paginate/installation Пишу:
gem install will_paginate
ERROR:  could not find will_paginate locally or in a repository
Наверное, надо как-то указать ссылку на wiki.github.com 

Какая разница устанавливать will_paginate как gem или как плагин?

Автор: source777 21.12.2009, 12:47
Цитата(Лена @  21.12.2009,  11:59 Найти цитируемый пост)
Какая разница устанавливать will_paginate как gem или как плагин?

Gem'ы могут быть совместно использованы разными приложениями на хостинге, их удобнее подключать, управлять их версиями и нет необходимости возиться с git submodules как в случае с плагинами.


Цитата(Лена @  21.12.2009,  11:59 Найти цитируемый пост)
gem install will_paginate
ERROR:  could not find will_paginate locally or in a repository

Покажи вывод gem -v
должно быть 1.3.5
Если у тебя более старая версия 1.3.x, выполни gem update --system
Если у тебя более старая версия 1.2.x, выполни: 
Код

gem install rubygems-update 
update_rubygems


После того как обновишь RubyGems до 1.3.5 выполни gem tumble

Автор: Лена 21.12.2009, 14:47
Цитата(source777 @  21.12.2009,  12:47 Найти цитируемый пост)
Покажи вывод gem -v



>gem -v
1.1.1
>gem install rubygems-update 
Bulk updating Gem source index for: http://gems.rubyforge.org/
Bulk updating Gem source index for: http://gems.rubyforge.org/
ERROR:  Error installing rubygems-update:
    rubygems-update requires builder (>= 0)
>

Автор: source777 21.12.2009, 15:32
Цитата(Лена @  21.12.2009,  14:47 Найти цитируемый пост)
>gem -v
1.1.1

Это уже более тяжелый случай, надо переустанавливать RubyGems вручную, ну или воспользоваться чем-нибудь вроде http://bitnami.org/stack/rubystack.

Автор: Лена 21.12.2009, 16:47
Импортировала свой проект из 3dRails 1.2 в 3dRails 2.0. Протокол в этой среде у меня получился такой:
>gem -v
1.2.0
>gem install rubygems-update 
Successfully installed rubygems-update-1.3.5
1 gem installed
Installing ri documentation for rubygems-update-1.3.5...
Installing RDoc documentation for rubygems-update-1.3.5...
Could not find main page README
Could not find main page README
Could not find main page README
Could not find main page README
>update_rubygems
Unknown command: 'update_rubygems'
>gem install will_paginate
Successfully installed will_paginate-2.3.11
1 gem installed
Installing ri documentation for will_paginate-2.3.11...
Installing RDoc documentation for will_paginate-2.3.11...
>

Судя по всему will_paginate установился.

Автор: shine 21.12.2009, 17:18
Цитата официальной инструкции по will_paginate:

To enable the library your Rails 2.0.x or 1.2.x project, require it in “config/environment.rb”

Код

Rails::Initializer.run do |config|
  ...
end

require "will_paginate"


Это было сделано?

Автор: Лена 21.12.2009, 18:26
Нет глубокого понимая как адаптировать эту штуку под мой код...
Вроде все сделала, но естественно у меня не работает.  smile 
class Product < ActiveRecord::Base
  has_many :line_items
    cattr_reader :per_page
    @@per_page = 10
    
def self.find_products_for_sale
     find(:all, :order => "title")
   end
И т.д.


def index
      @board = Product.find_products_for_sale
      @posts, @page = Product.paginate_all_by_ board _id(@board.id, :page => params[:page])
    end


Добавила: require "will_paginate"

А в представлении добавила:
<%= will_paginate @posts %>

Ошибка:
undefined method `paginate_all_by_ board _id' for Product:Class


Я не понимаю как правльно строиться эта строка: Product.paginate_all_by_ board _id
Думала так: Product.paginate_all_by_ product _id то же самое...

Автор: source777 21.12.2009, 19:15
Цитата(Лена @  21.12.2009,  18:26 Найти цитируемый пост)
Нет глубокого понимая как адаптировать эту штуку под мой код...

А у тебя есть такая странная необходимость? В 99.9% случаев достаточно просто использовать gem согласно документации, а не адаптировать его под что-то...

Цитата(Лена @  21.12.2009,  18:26 Найти цитируемый пост)
def index
      @board = Product.find_products_for_sale
      @posts, @page = Product.paginate_all_by_ board _id(@board.id, :page => params[:page])
    end


Лен, скажи честно, ты по-английски хорошо понимаешь? Почему ты берёшь кусок из документации в котором описывается как можно передавать paginate параметры аналогично find и конструировать аналогичные мета-методы, когда тебе достаточно самого простого варианта использования:
Код

def index
  @products = Product.paginate :page => params[:page]
end

?


Автор: Лена 21.12.2009, 19:39
Цитата(source777 @  21.12.2009,  19:15 Найти цитируемый пост)
@products = Product.paginate :page => params[:page]


Этот вариант я пробовала:
undefined method `paginate' for Product:Class

Добавлено через 4 минуты и 26 секунд
Ошибка пропала после перезапуска сервера... Однако никакого разбияния страниц внизу не наблюдаю... smile 

Автор: source777 21.12.2009, 19:54
Цитата(Лена @  21.12.2009,  19:39 Найти цитируемый пост)
Однако никакого разбияния страниц внизу не наблюдаю... smile  

А у тебя точно есть более 10 продуктов?

Добавлено через 58 секунд
Цитата(Лена @  21.12.2009,  18:26 Найти цитируемый пост)
<%= will_paginate @posts %>

С какой стати @posts, вместо @products?

Автор: Лена 21.12.2009, 20:10
Все, вроде заработало. smile 
@products  = Product.paginate :page => params[:page], :order => 'title', :per_page => 10

<%= will_paginate @products  %>

И на русском:
в environment.rb в самый низ пишем
WillPaginate::ViewHelpers.pagination_options[:prev_label] = '<< Предыдущая'
WillPaginate::ViewHelpers.pagination_options[:next_label] = 'Следующая >>'


Это рекомендуют писать в initializers/will_paginate.rb
но я такого файла в своем дереве не обнаружила...


Автор: Лена 21.12.2009, 20:47
Как можно улучшить код? Если перейти по ссылке внизу пагинатора, то ссылка будет http://localhost:3000/store?page=2
Если пользователь в строке адреса напишет так: http://localhost:3000/store?page=vv то будет ошибка. Как ее перехватить?

Автор: source777 21.12.2009, 21:54
Цитата(Лена @  21.12.2009,  20:10 Найти цитируемый пост)
@products  = Product.paginate :page => params[:page], :order => 'title', :per_page => 10
Если пользователь в строке адреса напишет так: http://localhost:3000/store?page=vv то будет ошибка. Как ее перехватить?


Код

page = params[:page].to_i
@products  = Product.paginate :page => (page==0 ? 1 : page), :order => 'title', :per_page => 10



Цитата(Лена @  21.12.2009,  20:10 Найти цитируемый пост)
Это рекомендуют писать в initializers/will_paginate.rb
но я такого файла в своем дереве не обнаружила...

Ну так создай. Ты ведь читала про http://guides.rubyonrails.org/configuring.html#using-initializers? Инициализатором может быть любой rb-файл в этой папке.

Автор: Лена 21.12.2009, 22:07
Большое спасибо! Очень красивое решение!  smile 

Автор: AndreyDr 21.1.2011, 19:24
Здравствуйте, я установил и настроил will_paginate, но хочется чтобы url был вида /page/1, вместо /articles?page=1. Если кто уже решал такой вопрос, подскажите пожалуйста или дайте ссылку на туториал. Заранее спасибо

Модератор: Пожалуйста, один топик - один вопрос, один топик - один топикстартер. 
Создай новую тему для своего вопроса.

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