Ruby父对象可以访问子属性

时间:2014-07-21 08:26:43

标签: ruby-on-rails ruby inheritance

所以我想知道是否有更好的方法来做到这一点。我有一个父类,有三个1对1的关系,孩子。

class Parent
  has_one :child_one
  has_one :child_two
  has_one :child_three
...
end

然后在每个子对象中我陈述belongs_to :parent,现在ChildOne有attribute1attribute2...attribute30等。

我正在使用一个使用yaml构建计算的gem,但它只能访问Parent类的表或模型。这意味着我需要从ChildOne类中获取所有属性,我必须像这样拉

def calculation_one
  cal_one = self.child_one.attribute1
end

然后继续。这意味着我将拥有一个只是链接子属性的模型。有没有更好的方法呢?

更新

我正在寻找的是一种基本上attr_accessor子类的方法吗?

class Parent
  attr_accessor :child_one, :attribute1
end

person = Parent.new
person.attribute1 = "awesome"
person.attribute1 # => "awesome"

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找的是rails中的Delegate模块:您可以调用delegate让相关模型响应方法调用:

class Parent < ActiveRecord::Base
  has_one :child_one
  delegate :attribute1, to: :child_one
end

完整文档:http://apidock.com/rails/Module/delegate