2012-01-04 6 views
1

[OK]を、私はレールに次のモデルがあります:アクセスID

  • シャードに属している、またはいずれかの「シャード」
  • 「現実」は何に属しています
  • 現実にスペース

に属し

  • 「プロパティ」を所属する「スペース」私はshard.reality.space.first.propertiesにアクセスすることができ、私はこの方法でアクセスされている場合、プロパティモデルのカスタムメソッドから 'シャード' IDにアクセスできるようにしたいと思います。

    これを実行する方法はありますか?

  • +0

    誰かがあなたがここにいくつかの深刻なカプセル化を壊していることを指摘しなければなりません。 demeterの法則(http://en.wikipedia.org/wiki/Law_of_Demeter)は、普遍的には1ドットだけであると解釈されていますが(過度に簡素化されていますが)、あなたがしようとしていることは間違いなくそれに違反しています。プロパティは、それ自体とそのメンバーについてのみ知っている必要があります。スペースは「メンバー」であり、シャードはそうではありません。私はあなたがそれをどのように構造化しているかを見て、より良い方法を見つけ出すことができるかどうかを見ます。 – karmajunkie

    答えて

    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 
    
    関連する問題