ActiveRecord принадлежит_ для ассоциации не сохраняет foreign_key (Rails 4)

В эти выходные я решил попробовать Rails 4 и быстро столкнулся со следующей проблемой:

У меня есть две модели (хотел попробовать OpenSchema, если вам интересно):

запись

has_many :ns_attributes

NsAttribute

belongs_to :record

Теперь в консоли:

record = Record.create!(name: "blowing in the wind")
nsa = NsAttribute.new(key: "artist", value: "bob dylan", record: record)


#<NsAttribute id: nil, key: "artist", value: "bob dylan", record_id: 4, created_at: nil, updated_at: nil>

irb(main):007:0> nsa.save!
(0.4ms)  BEGIN
Record Exists (0.7ms)  SELECT 1 AS one FROM "records" WHERE "records"."name" IS NULL LIMIT 1
(0.2ms)  COMMIT
=> true
irb(main):008:0> nsa
=> #<NsAttribute id: nil, key: "artist", value: "bob dylan", record_id: nil, created_at: nil, updated_at: nil>

Как видите, запись не была сохранена (record_id: nil).

  • Я также попытался добавить class_name и foreign_key в метод own_to без изменений.
  • Может ли это быть из-за названия модели AR? ("Запись")
  • Там нет проверки на две модели

Любые подсказки относительно того, что происходит, приветствуются!

2 ответа

Решение

У меня такая же проблема. Кажется, это ошибка в Rails 4. Вот тестовый пример:

https://gist.github.com/jemmyw/8163504

И вот вопрос:

https://github.com/rails/rails/issues/13522

Вы можете исправить это для каждой модели, добавив следующий фрагмент под моделью, имеющей связь записей:

NsAttribute::GeneratedFeatureMethods.module_eval %Q{
  def create_record(*args, &block)
    super
  end
}

Попробуйте это вместо этого:

record.ns_attributes.create!(key: "artist", value: "bob dylan")
Другие вопросы по тегам