2011-06-14 38 views
0

build_foo調用中的第二個參數絕不會將其設置爲Foo#initialize(即args[1]nil)。任何建議,以獲得兩個或更多的參數傳遞到Foo#initialize,同時保持*args初始化的唯一參數?如何在Rails 3的build_association調用中傳遞多個構造函數參數?

class Foo < ActiveRecord::Base 
    belongs_to :bar 
    def initialize *args 
     super() 
     self.total = args[0] + args[1] 
    end 
end 

class Bar < ActiveRecord::Base 
    has_one :foo 
    def do_something 
     build_foo 2, 3 # 3 never reaches Foo#initialize 
     build_foo [2,3] # args[0] == [2,3], which is not what's desired 
     save! 
    end 
end 
+0

爲了您的方便:http://guides.rubyonrails.org/association_basics.html#detailed-association-reference – 2011-06-14 06:42:55

回答

3

要回答你的問題 - 你不能。只是因爲build_foo只有documentation中定義的一個參數,即arguments = {},所以你應該只傳遞參數hash來初始化你的新記錄。

您也不需要撥打#super#initialize,因爲AR :: Base本身並沒有定義#initialize

爲什麼你需要傳遞2個不同的參數,而不是參數散列?位置參數不會告訴您設置了哪個值,並且AR對象可能在表中有多個屬性。

+0

謝謝MBO。在真正的代碼中(與上面顯示的簡化版本相比),我做的沒有參數哈希值,因爲參數都是不同用戶定義的類的實例(即args [n] .is_a?ClassA,args [m])。 is_a?ClassB等)。參數的位置並不重要,因爲我可以通過is_a獲得該類。並因此確定它是哪個參數。但是現在給出你的解釋,我會考慮採用一個參數{}。感謝您的幫助。 – 2011-06-14 06:56:18

相關問題