RailsCasts中国語版、#5 Using with_scope findメソッドに対する役割ドメインの限定

1935 ワード

今回は、with_scopeの方法について議論します.次のTaskには、すべての未完了タスクを返すクラスメソッドfind_incompleteが定義されている.
class Task < ActiveRecord::Base

  belongs_to :project



  def self.find_incomplete

    find_all_by_complete(false, :order => 'created_at DESC')

  end

end

コントローラTasksControllerでこのように呼び出すことができる.
class TasksController < ApplicationController

  def index

    @tasks = Task.find_incomplete

end

この実装には、パラメータをメソッドに渡すことができないという制限があります.例えば、未完了のタスクに戻る最初の20個を指定したいと思っています.
@tasks = Task.find_incomplete :limit => 20
Taskfind_incompleteにハッシュパラメータを受け入れることができます.次に、この機能を実現するために、入力されたパラメータを結合した後にfindに入力する方法を実装する.もちろん、find_scope法を用いてfind法にパラメータを伝達するより優雅な実装がある.
class Task < ActiveRecord::Base

  belongs_to :project



  def self.find_incomplete(options = {})

    with_scope :find => options do

      find_all_by_complete(false, :order => 'created_at DESC')

    end

  end

end
findメソッドが実行されると、with_scopeで指定された条件が関連付けられる.これにより、find_incomplete法は、任意の入力フィルタ条件パラメータを携帯することができる.この特性は他の役割ドメインでも有効になります.次のコードでは、結果の数を制限するパラメータを入力します.findメソッドは、2つの役割ドメインに渡されます.1つ目のレイヤは、指定されたプロジェクト内のすべての未完了タスクを取得し、2つ目のレイヤは、結果制限が上位20に戻ることです.
@tasks = @project.tasks.find_incomplete :limit => 20

作者の授権:You are welcome to post the translate text on your blog as well if the episode is free(not Pro).I just ask that you post a link back to the original episode on railscasts.com .
原文リンク:http://railscasts.com/episodes/5-using-with-scope?view=asciicast