現在のユーザーに応じてすべてのクエリをフィルター処理する既定のスコープを作成したいと考えています。現在のユーザーを引数として default_scope に渡すことは可能ですか? (これは通常のスコープで実行できることを知っています)そうでない場合、別の解決策は何ですか?
1816 次
2 に答える
2
default_scope
which has many pitfallsを使用する代わりに、ラムダで名前付きスコープを使用することを検討する必要があります。例えばscope :by_user, -> (user) { where('user_id = ?', user.id) }
次にbefore_filter
、コントローラーで a を使用して、必要なすべてのアクションでこのスコープを簡単に使用できます。
モデル内のヘルパー メソッドにアクセスできないため、これも適切な方法です。モデルは、セッション データについても心配する必要はありません。
before_filter
編集:コントローラー内でスコープを使用する方法:
before_filter :set_object, only: [:show, :edit, :update, :destroy]
[the rest of your controller code here]
private
def set_object
@object = Object.by_user(current_user)
end
明らかに、要件に応じてこれを変更します。ここでは、show、edit、update、および destroy アクション内の current_user に応じて、有効な @object のみが必要であると想定しています。
于 2015-03-11T22:28:37.547 に答える