2

現在のユーザーに応じてすべてのクエリをフィルター処理する既定のスコープを作成したいと考えています。現在のユーザーを引数として default_scope に渡すことは可能ですか? (これは通常のスコープで実行できることを知っています)そうでない場合、別の解決策は何ですか?

4

2 に答える 2

2

default_scopewhich 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 に答える