2017-03-14 5 views
0
class Baby 
    belongs_to :child 
    attr :is_public 
    scope :public, includes(:child).merge(Child.public).where('babies.is_public IS TRUE') 
end 

class Child 
    belongs_to :parent 
    attr :is_public 

    scope: public, where ??? 
    def is_public; read_attribute(:is_public).blank? ? self.parent.is_public : super(); end 
end 

class Parent 
    has_many :children 
    attr :is_public 
end 

から属性の値を持つオブジェクトのコレクションを取得するにはかのうであることは、子供のattribute_aの値がNULLであれば子供 のオブジェクトのコレクションを取得することは可能です それは1つのSQL文でparents.attribute_a から値を取得する必要がありますSQL + Railsは - それは、他のテーブルの列

+0

http://stackoverflow.com/a/14840547/3523538を支援 –

答えて

0

は、私が思うに、基本的なSQLロジックは、次のようにすることによって必要があります。

SELECT c.*,p.* FROM child c 
INNER JOIN parent p ON p.id = c.parent_id 
LEFT JOIN baby b on b.id = c.baby_id 
WHERE b.id IS NULL 

あなたが代わりにルビークラスのSQLクエリを使用したい場合は、あなたが使用することができます。

query_result = ActiveRecord::Base.connection.execute('Your query') 

希望これは

関連する問題