On my Question model I have some scopes
scope :recent, order("created_at DESC")
scope :approved, where("status = ?", "approved")
scope :answered, approved.recent.where("answers_count > ?", 0)
On my question controller I’m retrieving questions using the scopes
example 1:
@questions = Question.approved.recent
example 2:
@questions = User.find(session[:user_id]).topics.map { |t| t.questions.approved.recent }.flatten.uniq
I’m trying to put will_paginate on my model to make things easier on the controller but the 2nd example is very tricky as it is using mapping to retrieve questions according to preferences.
I’ve tried to add this on my model
def self.pagination(page = 1)
self.paginate(:page => page, :per_page => 5)
end
and then on my controller I have
@questions = Question.approved.recent.pagination.(params[:page])
That works fine for the 1st example but I Dont know how to implement that on the 2nd example
Any hints?
This looks like Rails 3. Be sure to use the
~> 3.0.pre2version of the will_paginate gem.You can use the
paginatemethod at the end of your chain of scopes. For example, your “example 1” would be:I see you created a custom method (
pagination) to wrap this pattern, but it’s best that you keep this syntax in original form for now, especially since you’re dealing with scopes and Relation objects in Rails 3 and will_paginate doesn’t have proper support for this yet (but it’s coming).In your “example 2” it seems you only need to fetch the first few recent questions from each topic and that you won’t perform a full-blown pagination here (like, going to page 2 and forward). You don’t have to use the
paginatemethod here; you can simply use ActiveRecord’slimit: