我的模型user
有一个traversal
。遍历模型具有属性框架。我可以使用
user.traversal.frame
但我似乎记得铁轨上的红宝石意味着可以进行以下工作。
user.traversal_frame
在用户模型中没有额外的方法,即没有执行
def traversal_frame
self.traversal.frame
end
还有其他办法吗?
答案 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