Rails Active Record - Как использовать build, когда в ассоциированной модели есть метод инициализации? - PullRequest
3 голосов
/ 15 сентября 2011

У меня есть модель с именем «Пользователь», у которой много ассоциаций с моделью «Адрес».

Когда я выполняю User.new.addresses.build, я получаю следующую ошибку,

    ArgumentError: wrong number of arguments (1 for 0)
    from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/reflection.rb:162:in `initialize'
    from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/reflection.rb:162:in `new'
    from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/reflection.rb:162:in `build_association'
    from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_collection.rb:423:in `build_record'
    from /usr/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_collection.rb:102:in `build'
    from (irb):10

Это происходит, когда я добавляю метод инициализации в модель адреса.

Любая помощь высоко ценится ...

РЕДАКТИРОВАНИЕ:

Нет аргументов для инициализацииметод, и это выглядит так

class Address < ActiveRecord::Base
  attr_accessor :test

  def initialize
    test = "manu"
  end
end

Ответы [ 2 ]

2 голосов
/ 15 сентября 2011

after_initialize крючок должен служить вашей цели

class Address < ActiveRecord::Base
  attr_accessor :test
  after_initialize :init

  def init
    @test = "manu"
  end
end
1 голос
/ 15 сентября 2011

Не рекомендуется переопределять метод initialize унаследованного класса ActiveRecord.Используйте after_initialize callback, если вы хотите добавить свою пользовательскую инициализацию.См. Rails api для всех обратных вызовов ActiveRecord .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...