1
我試圖創建Rails 3模型的範圍,這一點,主要有:SQL或範圍3 /阿雷爾
scope :published, where(:published => true)
scope :viewable_by, lambda { |user| where(:user_id => user.id).or(published) }
麻煩的是,我無法找到一種方法,使這個工作。
我曾希望arel_table會的工作,但它會抱怨「無法訪問的ActiveRecord ::關係」:
where(arel_table[:user_id].eq(user.id)).or(published)
這可以通過複製「出版的」範圍爲阿雷爾進行,但是隨後我會重複代碼(在我的項目「上發表」範圍是相當多的深度)。
我能想出的最好的是這樣的:
scope :viewable_by, lambda { |user| where("(user_id = ?) OR (#{published.where_values.collect(&:to_sql).join(" AND ")})", user.id) }