我有这两个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 =>返回错误:#
的未定义方法“里程碑”我需要一种“干净”的方式才能找到主父级里程碑信息。
答案 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