Rails3プロジェクトがあります。Rails 3には、Arelと、あるスコープを再利用して別のスコープを構築する機能が搭載されています。関係を定義するときにスコープを使用する方法があるかどうか疑問に思っています(たとえば、「has_many」)。
パーミッション列のあるレコードがあります。レコード(リレーションシップを介してアクセスされるレコードも含む)がフィルター処理されるように、アクセス許可列を考慮に入れるdefault_scopeを作成したいと思います。
現在、Rails 3では、default_scope(私が見つけたパッチを含む)は、proc(後期変数バインディングに必要)を渡すための実行可能な手段を提供していません。名前付きスコープを渡すことができるhas_manyを定義することは可能ですか?
名前付きスコープを再利用するというアイデアは、次のようになります。
Orders.scope :my_orders, lambda{where(:user_id => User.current_user.id)}
has_many :orders, :scope => Orders.my_orders
または、関係でその名前付きスコープを暗黙的にコーディングすると、次のようになります。
has_many :orders, :scope => lambda{where(:user_id => User.current_user.id)}
実行時バインディングを使用してdefault_scopeを適用しようとしています。私はArelアプローチ(ある場合)を使用したいと思いますが、実行可能なオプションを使用します。
現在のユーザーを参照しているため、次のような最後の時点で評価されていない条件に依存することはできません。
has_many :orders, :conditions => ["user_id = ?", User.current_user.id]