あなたはしません。と の 2 つのスコープを定義pending
しapproved
、URL に基づいて条件付きで呼び出します。実行時にスコープを動的に変更することはできません (少なくともすべきではありません) 。
if/else の分岐を避けたい場合send
は、許容可能なメソッドの事前承認リストに含まれていることを確認した後、メソッドをモデルに追加できます。
class MyController
def index
@objects = Object.send(scope).chain.chain.chain
end
protected
# return "pending", "approved", or "scoped",
# so that Object.send(scope) *always* works, and returns a chainable relation
def scope
scopes = %w(pending approved)
scopes.include?(params[:status].to_s) ? params[:status] : "scoped"
end
end
"scoped"にデフォルト設定することで、呼び出されたメソッドが、追加のメソッドを連鎖できるリレーションを返すことを保証します。