首页 > 解决方案 > 委托一个协会

问题描述

我有一个模型 A,它有许多另一个模型 B,它有很多第三个模型 C,并且想将 A 从 B 委托给 C。例如:

class House < ApplicationRecord
  has_many :pets
end

class Pet < ApplicationRecord
  belongs_to :house
  has_many :toys
  delegate :house, to: :toys
end

class Toy < ApplicationRecord
  belongs_to :pet
end

> toy.house

就目前而言,我必须使用toy.pet.house

标签: ruby-on-rails

解决方案


尝试

class Toy < ApplicationRecord
  belongs_to :pet 
  delegate :house, to: :pet 
end

并删除

delegate :house, to: :toys 

Pet.

至少有两个问题:

class Pet < ApplicationRecord
  belongs_to :house
  has_many :toys
  delegate :house, to: :toys
end

首先, 的实例Toy不响应house,所以你不能delegate :house, to: :toys。其次,即使 的实例Toy 确实响应house,您也无法在集合上调用该实例方法,这就是事实toys。所以,这一切都被破坏了。

Pet但是,确实house. 并且,Toy belongs_to :pet。所以,你做到了Toy delegate :house, to: :pet。鲍勃是你的叔叔!


推荐阅读