Rails 3モデルスコープを作成しようとしています。これは本質的に次のとおりです。
scope :published, where(:published => true)
scope :viewable_by, lambda { |user| where(:user_id => user.id).or(published) }
問題は、これを機能させる方法が見つからないことです。
私は arel_table が機能することを望んでいましたが、「ActiveRecord::Relation にアクセスできません」と不平を言っています:
where(arel_table[:user_id].eq(user.id)).or(published)
これは、「公開」スコープを Arel として複製することで実行できますが、コードを繰り返すことになります (私のプロジェクトでは、「公開」スコープはかなり詳細です)。
私が思いつくことができる最高のものはこれです:
scope :viewable_by, lambda { |user| where("(user_id = ?) OR (#{published.where_values.collect(&:to_sql).join(" AND ")})", user.id) }