2013-06-09 2 views
0

Я переношу приложение из rails3.2.13 в rails4.0.0-rc1. Я имею следующий код:Создание ассоциаций в переднем фильтре в rails4

class Foo < ActiveRecord::Base 
    has_many :bars 
    before_create :build_bars 

    private 

    def build_bars 
    self.bars.build({name: 'Bar 1'}) 
    self.bars.build({name: 'Bar 2'}) 
    end 
end 

Код выше работал в rails3, но создает пустые записи в rails4. Некоторая попытка & Ошибка в консоли показала, что, действительно, атрибуты не назначены.

f = Foo.new 
f.bars.build({name: 'Bar'}) 
=> #<Bar id: nil, name: nil> 

Каков правильный способ создания ассоциаций и их сохранения вместе со своей родительской записью?

+0

Это может имеют какое-то отношение к замене 'attr_accessible' сильными параметрами. – Mischa

ответ

1

Я считаю, что @Mischa прав. я уже мигрировали мое приложение к rails4, и она работает:

user.authorizations.build provider: "bla" 
=> #<Authorization id: nil, provider: "bla", uid: nil, user_id: 1, created_at: nil, updated_at: nil> 

вы можете посмотреть на изменения я сделал: https://github.com/phoet/on_ruby/pull/83/files#L23L59

, скорее всего, это удаление:

# Mass assignment settings 
config.active_record.whitelist_attributes = true 
+0

хороший намек, но я удалил эту часть при переносе. – pduersteler

+0

@pduersteler вы все еще используете attr_accessible с обратным совместимым камнем? – phoet

+0

nope, нет драгоценного камня с обратной совместимостью и не определено 'attr_ *' (ожидать accessors). Если я определяю, например. attr_accessible, я получаю сообщение об ошибке. – pduersteler