0

build_foo 调用中的第二个参数永远不会进入Foo#initialize(即args[1]is nil)。有什么建议可以让两个或多个参数传入Foo#initialize,同时保持*args唯一的参数初始化?

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
4

1 回答 1

3

回答你的问题 - 你不能。仅仅因为 build_foo 在文档中只定义了一个参数,即arguments = {},所以你应该只传递参数 hash 来初始化你的新记录。

你也不需要调用#superin #initialize,因为 AR::Base 没有定义#initialize自己。

为什么需要传递 2 个不同的参数而不是参数哈希?位置参数不会告诉您设置了哪个值,并且对于 AR 对象,您可能在表中具有多个属性。

于 2011-06-14T06:43:12.297 回答