2012-01-08 5 views
0

これはかなり簡単なはずですが、うまく動作しないようです。私はhas_many関係を持つモデルを持っています。私はそれぞれの特定の属性だけを選択できるように親にスコープが必要です。Rails 3スコープは、has_many関係の特定の属性のみを選択します。

例:

class Bakery < ActiveRecord::Base 
    has_many :pastries 
    scope :summary, select([:id, :name, 'some option calling pastries.summary']) 

class Pastry < ActiveRecord::Base 
    belongs_to :bakery 
    scope :summary, select([:id, :image_url]) 

は、私が唯一持っているだけにIDと名前人口で、それのペストリー配列内の各ペストリーのためのベーカリーモデルをBakery.first.summaryようなものを呼び出して取得できるようにしたいと思いますidおよびimage_url属性が移入されました。

あなたがこれを行うことができます

答えて

1

が、それは(あなたが基になるクエリを最適化しようとしていると仮定?)結果として作られていますSQLクエリには影響しません。

class Pastry 
    ... 
    def summary 
    { 
     :id => self.id, 
     :image_url => self.image_url 
    } 
    end 
end 

class Bakery 
    ... 
    def summary  
    pastries.collect {|i| i.summary } 
    end 
end 

これは、あなたを与えるだろうモデルインスタンスではなく、ハッシュの配列。

ActiveRecordは、モデルの予想どおりに動作しません。必要と思われるデータはすべて取得します。あなたのような生のSQLクエリを代わりにSequel宝石を使用して、または実行時に見ることができる:

Pastry.find_by_sql("SELECT id, name from ...") 

しかし、これはあなたに予期しない動作を与えることができます。

+0

あなたが正しくクエリを最適化しようとしていることを確認してください。単一のモデルに対して作成されたクエリに影響を与えることができますが、has_many関係で使用されるクエリには影響を与えないということは奇妙です。 – jwarzech

+0

また、DataMapperを見てみましょう。これは、あなたが望むものを見つけるかもしれません - それは "怠惰な読み込み"を持っています。 http://datamapper.org – stef

関連する問題