2014-10-02 53 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)