0

私はこれらの2つのアクティブレコードモデルを持っています:

Milestone
  has_many :nodes

Node
  belongs_to :milestone

エイリアスを作成できるため、マイルストーンは複数のノードを持つことができます。次に、マスター ノードを見つける方法が必要です。

2 つのオプションを試しましたが、どれも完全には機能しません。

オプション 1: 関連付けを追加する :node :

 belongs_to :node, conditions: {is_alias: true}

私には明白に見えますが、まったく機能しません。@milestone.node を実行すると、結果は「nil」です

オプション 2: ノード メソッドを作成します。

  def node
     Node.where(milestone_id: self.id, is_alias: false)
  end

これは途中で機能します:

@milestone.node => 正しいノードを返します

@milestone.node.milestone => はエラーを返します: undefined method `milestone' for #

マスターの親マイルストーン情報を見つけることができる「クリーンな」方法が必要です。

4

1 に答える 1

1

Node モデルにはいくつかのスコープとクラス メソッドが必要です

scope :aliases, where(is_alias: true)
scope :masters, where(is_alias: false)

def self.master
  masters.first
end

だからあなたはこれをそのように使うことができます

@milestone.nodes.master  # => master node
@milestone.nodes.aliases # => aliases
于 2012-04-06T13:13:43.630 に答える