belongs_to with condition to find master parent不起作用

时间:2012-04-06 12:45:24

标签: ruby-on-rails activerecord associations

我有这两个activerecord模型:

Milestone
  has_many :nodes

Node
  belongs_to :milestone

里程碑可以有多个节点,因为可以创建别名。然后我需要一种方法来找到主节点。

我尝试了两个选项,但它们都没有完全发挥作用:

选项1:添加关联:节点:

 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 =>返回错误:#

的未定义方法“里程碑”

我需要一种“干净”的方式才能找到主父级里程碑信息。

1 个答案:

答案 0 :(得分: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