在rails上的ruby中传递关联属性

时间:2017-11-23 06:08:25

标签: ruby-on-rails

我的模型user有一个traversal。遍历模型具有属性框架。我可以使用

访问它
user.traversal.frame

但我似乎记得铁轨上的红宝石意味着可以进行以下工作。

user.traversal_frame

在用户模型中没有额外的方法,即没有执行

def traversal_frame
  self.traversal.frame
end

还有其他办法吗?

1 个答案:

答案 0 :(得分:3)

使用delegate方法。像下面这样的东西

class User < ActiveRecord::Base
  has_one :traversal
  delegate :frame, to: :traversal
end

然后您可以像使用

一样使用它
user.frame # => Same as user.traversal.frame

注意: - 当user没有traversal时,user.frame会抛出错误raises NoMethodError: undefined method 'frame'以修复此用途

delegate :frame, to: :traversal, allow_nil: true

要使用user.traversal_frame访问它,您必须使用prefix选项,如下所示

delegate :frame, to: :traversal, prefix: true, allow_nil: true