Model.scoped

ActiveRecord で Model の空のリレーションを作成するには、scoped メソッドを使うらしい。(WEB-DB PRESSに載ってたらしいけど引っ張り出せない。)

https://github.com/rails/rails/blob/master/activerecord/lib/active_record/named_scope.rb

ri scoped する。

Returns an anonymous scope.

  posts = Post.scoped
  posts.size # Fires "select count(*) from  posts" and returns the count
  posts.each {|p| puts p.name } # Fires "select * from posts" and loads post objects

  fruits = Fruit.scoped
  fruits = fruits.where(:colour => 'red') if options[:red_only]
  fruits = fruits.limit(10) if limited?

Anonymous scopes tend to be useful when procedurally generating complex
queries, where passing intermediate values (scopes) around as first-class
objects is convenient.

こんな感じか。

# model
class Item < ActiveRecord::Base
  # ..
  def self.rel(condition = nil)
    if condition.present?
      where(condition)
    else
      scoped
    end
  end
end
# controller
  cond = { :cond => :somthing }
  @items = Item.rel(cond).paginate(:page => 1) #...