加载关系

时间:2018-03-07 17:17:20

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

目标:我希望将所有客户的医疗条件作为一个数组包含在客户的结果中。

有:

cust = Customer.includes(:conditions).find(1)

预期结果:

#<Customer id: 1, first_name: "John", last_name: "Doe", conditions [...]>

实际结果:

#<Customer id: 1, first_name: "John", last_name: "Doe">

我有2个类和第3个连接类(ConditionsCustomer)。

class Customer < ApplicationRecord
    has_many :conditions_customers
    has_many :conditions, through: :conditions_customers
end

#join table. Contains 2 foreign_keys (customer_id, condition_id)
class ConditionsCustomer < ApplicationRecord
  belongs_to :customer
  belongs_to :condition
end

class Condition < ApplicationRecord
  has_many :conditions_customers
  has_many :customers, through: :conditions_customers
end

有趣的是,我看到3个选择查询被解雇(客户,联接表和医疗条件表),所以我知道包含有些工作但不幸的是客户在没有医疗条件的情况下返回。

我也尝试过使用连接,但我一遍又一遍地获得了同一个客户的数组。

使用ActiveRecord有一种简单的方法吗?我不想手动合并记录。

1 个答案:

答案 0 :(得分:0)

通过活动记录不太可能,因为json提供了一些很酷的可能性:

render json: customers,
       include: {
         conditions: {
           only: [:attr1, :attr2], # filter returned fields
           methods: [:meth1, :meth2] # if you need model methods
         },
         another_joined_model: {
             except: [:password] # to exclude specific fields
         }
       }