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")