2012-01-04 97 views
1

没关系,我有以下型号的轨道:访问ID

  • “碎片”
  • “现实”,这既属于碎片,或属于什么
  • “空间”,这属于现实
  • “属性”属于空间

我可以访问shard.reality.space.first.properties,但我希望能够通过属性模型中的自定义方法访问'shard'id(如果以此方式访问它)。

有没有办法做到这一点?

+0

有人应该指出的是,你在这里打破了一些严重的封装。德米特法则(http://en.wikipedia.org/wiki/Law_of_Demeter)被普遍解释为只有一个点(尽管这是一种过于简单化),但是你试图做的事肯定会违反它。该财产只应了解自己及其成员;空间是一个“成员”,碎片不是。我会看看你是如何构建的,看看你是否能找到更好的方法。 – karmajunkie 2012-01-04 20:24:05

回答

0
class Property < ActiveRecord::Base 
    belongs_to :space 

    def custom_method 
    space.reality.shard.id if space.reality.shard 
    end 
end 
0

在一个Property对象上的实例方法,这应该工作:

shard_id = space.reality.shard_id 
# returns either the shard id, or nil if the reality doesn't belong to a shard