Я пытаюсь создать область действия модели 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) }