1

通常、acts_as_paranoid では、 や などのファインダーを使用すると、findnull以外の値 (または削除列に名前を付けwhereたもの) を持つエントリが除外されます。deleted_atただし、ユーザーがデータベース内の「削除された」(非表示を参照) エンティティを表示および操作できるようにするユーザー権限を作成しました。find現状では、 、またはwhere、または what-have-youを実行するたびに許可を確認する必要があります。その許可を持っているwith_deleted場合は、 act_as_paranoid ロジックは最初から機能するはずでありwith_deleted、そのロジックが機能しない場合は常に追加します。

これを達成する方法、またはそれに似た方法ですべてを DRY にする方法はありますか?

4

1 に答える 1

2

cancanを使用できます。これにより、能力を定義できます。次に、以下を定義できます。

if user.admin?
  can :manage, User.with_deleted
else
  can :manage, User
end

次に、次を使用してコントローラーで選択できます。

User.accessible_by(current_ability)
于 2013-11-21T10:41:58.490 に答える