Использовать расширения ассоциации:
class Profile < ActiveRecord::Base
has_many :images do
def page(limit=10, offset=0)
all(:limit=> limit, :offset=>offset)
end
end
end
Теперь вы можете использовать метод page
следующим образом:
@profile.images.page # will return the first 10 rows
@profile.images.page(20, 20) # will return the first 20 rows from offset 20
@profile.images # returns the images as usual
Редактировать
В этом конкретном случае, функция ассоциации может быть подходящей опцией. Даже лямбда с named_scope может работать. Если вы определяете его в классе Profile
, вы теряете аспект многократного использования named_scope
. Вы должны определить named_scope в вашем классе изображений.
class Image < ActiveRecord::Base
named_scope :paginate, lambda { |page, per_page| { :offset => ((page||1) -1) *
(per_page || 10), :limit => :per_page||10 } }
end
Теперь вы можете использовать этот named_scope с ассоциацией:
@profile.images.paginate(2, 20).all
Или вы можете использовать named_scope непосредственно в Image
классе
Image.paginate(2, 20).all(:conditions => ["created_at > ?" , 7.days.ago])
С другой стороны, почему вы не используете плагин will_paginate ?