Как передать более одного аргумента конструктора в вызове build_association в Rails 3? - PullRequest
0 голосов
/ 14 июня 2011

Второй аргумент в вызове build_foo никогда не превращается в Foo#initialize (то есть args[1] равно 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

1 Ответ

3 голосов
/ 14 июня 2011

Ответить на ваш вопрос - нельзя.Просто потому, что build_foo имеет только один параметр, определенный в документации , то есть arguments = {}, поэтому вы должны передавать туда только хэш аргументов, чтобы инициализировать вашу новую запись.Вызовите #super в #initialize, так как AR :: Base не определяет сам #initialize.

Почему вам нужно , чтобы передать 2 различных аргумента вместо хэша аргументов?Позиционные аргументы не сообщают вам, какое значение вы устанавливаете, и с объектами AR у вас, вероятно, более одного атрибута в таблице.

...