1
没关系,我有以下型号的轨道:访问ID
- “碎片”
- “现实”,这既属于碎片,或属于什么
- “空间”,这属于现实
- “属性”属于空间
我可以访问shard.reality.space.first.properties,但我希望能够通过属性模型中的自定义方法访问'shard'id(如果以此方式访问它)。
有没有办法做到这一点?
没关系,我有以下型号的轨道:访问ID
我可以访问shard.reality.space.first.properties,但我希望能够通过属性模型中的自定义方法访问'shard'id(如果以此方式访问它)。
有没有办法做到这一点?
class Property < ActiveRecord::Base
belongs_to :space
def custom_method
space.reality.shard.id if space.reality.shard
end
end
在一个Property
对象上的实例方法,这应该工作:
shard_id = space.reality.shard_id
# returns either the shard id, or nil if the reality doesn't belong to a shard
有人应该指出的是,你在这里打破了一些严重的封装。德米特法则(http://en.wikipedia.org/wiki/Law_of_Demeter)被普遍解释为只有一个点(尽管这是一种过于简单化),但是你试图做的事肯定会违反它。该财产只应了解自己及其成员;空间是一个“成员”,碎片不是。我会看看你是如何构建的,看看你是否能找到更好的方法。 – karmajunkie 2012-01-04 20:24:05