Rails 4 nested_attributes 更新
Rails 4 nested_attributes update
仅更新嵌套时出现错误。
我在做什么:
user = User.find(1)
user.update(data_attributes: {race: 2})
我的模特:
class User < ActiveRecord::Base
has_one :data, inverse_of: :user, class_name: UserData, autosave: true
accepts_nested_attributes_for :data
end
class UserData < ActiveRecord::Base
self.table_name = 'user_data'
belongs_to :user, inverse_of: :data
end
错误:
Mysql2::Error: Column 'user_id' cannot be null: UPDATE `user_data` SET `user_id` = NULL, `updated_at` = '2015-01-05 10:27:47.680681' WHERE `user_data`.`id` = 1
您的 user_data
table
具有不可为空的 user_id
column
。当您尝试 update
一条记录时,您没有设置 user_id
的值,因此它是 null
。而且,如上所述,column
不可为空。您需要将其设置为可为空,或将其设置为正确的值。
如果您想更新现有的 data
记录,您必须在 attributes_param 中包含对象 ID:
user = User.find(1)
user_data_id = user.data.id
user.update(data_attributes: { id: user_data_id, race: '2' })
仅更新嵌套时出现错误。
我在做什么:
user = User.find(1)
user.update(data_attributes: {race: 2})
我的模特:
class User < ActiveRecord::Base
has_one :data, inverse_of: :user, class_name: UserData, autosave: true
accepts_nested_attributes_for :data
end
class UserData < ActiveRecord::Base
self.table_name = 'user_data'
belongs_to :user, inverse_of: :data
end
错误:
Mysql2::Error: Column 'user_id' cannot be null: UPDATE `user_data` SET `user_id` = NULL, `updated_at` = '2015-01-05 10:27:47.680681' WHERE `user_data`.`id` = 1
您的 user_data
table
具有不可为空的 user_id
column
。当您尝试 update
一条记录时,您没有设置 user_id
的值,因此它是 null
。而且,如上所述,column
不可为空。您需要将其设置为可为空,或将其设置为正确的值。
如果您想更新现有的 data
记录,您必须在 attributes_param 中包含对象 ID:
user = User.find(1)
user_data_id = user.data.id
user.update(data_attributes: { id: user_data_id, race: '2' })