2012-01-08 62 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沒有表現出你對模型的期待 - 它會獲取它認爲你需要的任何數據。你可以看一下使用Sequel寶石替代,或者執行一個原始的SQL查詢,如:

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

但是這給你帶來意想不到的行爲。

+0

你正確的,我試圖優化查詢。奇怪的是,有能力影響爲單個模型創建的查詢,而不是由has_many關係使用的查詢。 – jwarzech 2012-01-08 09:58:54

+0

也可以看一下DataMapper - 你可能會發現這是你想要的 - 它有「延遲加載」。 http://datamapper.org – stef 2012-01-08 11:18:13