RailsCasts中国語版、#5 Using with_scope findメソッドに対する役割ドメインの限定
1935 ワード
今回は、
コントローラ
この実装には、パラメータをメソッドに渡すことができないという制限があります.例えば、未完了のタスクに戻る最初の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
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
Task
のfind_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