【发布时间】:2011-03-16 02:29:40
【问题描述】:
我正在尝试创建一个 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) }
【问题讨论】:
标签: sql ruby-on-rails ruby-on-rails-3 arel