1
나는 본질적으로 레일 3 모델 범위, 만들려고 해요 :이 만들 수있는 방법을 찾을 수 없습니다SQL 또는 범위 3/Arel
scope :published, where(:published => true)
scope :viewable_by, lambda { |user| where(:user_id => user.id).or(published) }
의 문제점은,이다 작업.
나는 arel_table 일하는 것이 기대하지만, 그것은 "액티브 :: 관계를 방문 할 수 없다"불평했다 : 이것은 Arel으로 "게시"범위를 복제하여 수행 할 수 있지만 그때는 반복 될 것이다
where(arel_table[:user_id].eq(user.id)).or(published)
코드 (그리고 내 프로젝트에서 "게시 된"범위는 좀 더 깊이 있음).
내가 가지고 올 수있는 최선은 이것이다 :
scope :published, where(:published => true)
scope :viewable_by, lambda { |user| where("user_id = ? OR #{published.where_clauses.first}", user.id) }
(물론에만 작동 :
scope :viewable_by, lambda { |user| where("(user_id = ?) OR (#{published.where_values.collect(&:to_sql).join(" AND ")})", user.id) }