Rails将两个关系组合成一个结果

时间:2014-10-02 13:24:16

标签: sql ruby-on-rails activerecord join

我有一张Dogs and Owners表 我希望得到一个结果,其中结果对象具有狗和所有者的字段,因此我可以稍后使用此对象,转换为json等,而无需再次查询数据库或点击缓存

所以,如果我有Dog.collie,并且每只狗都有idbreedageowner_id,并且每位所有者都有id },name -

我想用dog id,breed和所有者名称

创建一个新对象

Dog.joins(:owner).collie将返回一个狗对象列表,我想做dog.owner,它会点击缓存。如果我将其转换为json,则缺少所有者名称

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

如何返回一个包含3个字段的对象 - 狗的2个和所有者的1个(显然没有定义这样的对象,但让Rails这样做)

2 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

怎么样?

class Dog
  belongs_to :owner
end

dogs = Dog.all

dogs.to_json(:include => :owner)