私のアーキテクチャは次のようになっています(簡略化されています):特定のライフサイクル(作成、レビュー、閉鎖、そのようなもの...)を経る投稿を作成する異なる権限を持つユーザーがいます。Rails:動的:finder_sqlが可能ですか?
レールで言えば、class User has_many :posts
と言いますが、ユーザーには権限に応じて投稿が表示されます。ユーザーに特権が与えられている場合、彼はすべての投稿を見ることができるはずです。私は彼に、すでにレビューされた投稿と彼自身の投稿すべてを見ることを望みます。
今のところ、Postモデルにはクラスメソッドfor_user(user)
があり、これは単純にユーザー特権をチェックし、それに応じた投稿を返します。私はそれがprobalbyことを行うにはRailsのウェイではありません、理解し、そしてそれはそのような何かに行うことができれば、私は思っていた:finder_sqlする:残念ながら、これはレールのように動作しない
class User
has_many :posts, :finder_sql => finder
#[...]
def finder
if self.has_privileges? #simplified...
all
else
where('[...]')
end
end
を期待します文字列と文字列のみです。必要な動作を作成する他の方法はありますか?これは、ActiveRecordのがあなたのために行い、キャッシュの一部を失うという欠点を持っている
class User
has_many :all_posts, :class_name => "Post"
def posts
self.has_priviledges? ? self.all_posts : self.all_posts.where(...)
end
end
: