2014-10-02 57 views
0

我有一個狗和所有者表 我想要一個結果,其中生成的對象有狗和所有者的字段,所以我可以稍後使用此對象,轉換爲json等,而不需要再次查詢數據庫或命中cacheRails將兩個關係合併爲一個結果

,所以如果我有Dog.collie,每個狗有idbreedageowner_id,每個業主都有idname -

我想創建一個新的對象與狗編號,品種和所有者名稱

Dog.joins(:owner).collie會返回一個狗對象列表,我想做dog.owner,它會打到緩存。如果我將其轉換爲json,則所有者名稱缺失

on http://guides.rubyonrails.org/active_record_querying.html#selecting-specific-fields它說我可以返回具有特定字段的模型實例。

我怎樣才能返回一個對象有3場 - 狗的2和業主的1(顯然沒有定義這樣的對象,但讓Rails的做)

+0

看看這個鏈接,所有可能的選擇http://blog.arkency.com/2013/12/rails4-preloading/ – 2014-10-02 13:55:16

+0

請張貼更多的代碼示例和一些僞代碼給你找什麼做。你的問題不清楚。 – Andrew 2014-10-02 14:17:11

+0

我會盡力解釋,我知道rails可以做到這一點,我只是不知道如何叫它 – 2014-10-02 14:31:13

回答

0

你可以做

Dog.includes(:owner)

但是,如果你想要的是名字,那麼你可以委託給業主

Class Dog < ActiveRecord::Base 
    delegate :name, to: :owner, prefix: true, allow_nil: true 
end 

這將允許你這樣做

@dog = Dog.first 
@dog.owner_name => 'Bob' 
+0

是的,但之後我想返回結果作爲json,所以我需要在同一個散列/對象 – 2014-10-02 13:29:54

+1

好的,然後或者按照bekicot的說法或者覆蓋'to_json'方法 – 2014-10-02 13:36:32

0

那麼呢。

class Dog 
    belongs_to :owner 
end 

dogs = Dog.all 

dogs.to_json(:include => :owner)