0

URI のパラメーターに基づいてチェーンのスコープを動的に変更するにはどうすればよいですか?

例えば:

http://www.example.com/object?status=承認済み

につながりますObjectController#index

def index
  @objects = Object.approved.<other-chains>
end

statusだった場合pending、コントローラ メソッドは次のようになります。

@objects = Object.pending.<other-chains>

4

2 に答える 2

3

あなたはしません。と の 2 つのスコープを定義pendingapproved、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"にデフォルト設定することで、呼び出されたメソッドが、追加のメソッドを連鎖できるリレーションを返すことを保証します。

于 2013-06-14T16:30:56.050 に答える
-1

どうですか:

@objects = Object.send(params[:status])
于 2013-06-14T16:29:07.017 に答える