2012-04-06 23 views
0

我有這兩個ActiveRecord的模式:belongs_to的與條件找到主父不起作用

Milestone 
    has_many :nodes 

Node 
    belongs_to :milestone 

里程碑可以有多個節點,因爲它可以創建別名。然後我需要一種方法來找到主節點。

我嘗試了兩種選擇,但他們沒有完全工作:

選項1:添加關聯:節點:

belongs_to :node, conditions: {is_alias: true} 

看起來明顯,我卻不能在所有的工作。當我做@ milestone.node,結果是 「無」

選項2:創建一個節點的方法:

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

這個工程半途而廢:

@ milestone.node =>返回正確的節點

@ milestone.node.milestone =>返回一個錯誤:未定義的方法`里程碑」爲#

我需要一個‘乾淨’的方式能夠找到主父里程碑的Infor mation。

+1

很抱歉,但我不明白「里程碑可以有多個節點,因爲這是可能的創建別名。「 – 2012-04-06 13:00:08

+1

第二個選項不起作用,因爲你需要在鏈末尾應用'第一個'方法 – MikDiet 2012-04-06 13:04:46

回答

1

你需要在節點模型的一些領域和類方法

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 
+0

當然!如果沒有「第一個」方法,rails會認爲它是一個集合,即使我知道結果中只有一條記錄。非常感謝!任何想法爲什麼我的選項1(定義一個關聯)不起作用? – ndemoreau 2012-04-06 13:48:03

+0

選項1不起作用,因爲首先您需要單獨指定節點'@milestone.node = [some_node]' – MikDiet 2012-04-06 14:07:50