Rails 4 nested_attributes更新

时间:2015-01-05 10:44:39

标签: ruby-on-rails ruby ruby-on-rails-4 nested-attributes

我只在更新嵌套时遇到错误。

我在做什么:

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

2 个答案:

答案 0 :(得分:1)

如果要更新现有的data记录,则必须在attributes_param中包含对象ID:

user = User.find(1)
user_data_id = user.data.id
user.update(data_attributes: { id: user_data_id, race: '2' })

答案 1 :(得分:0)

您的user_data tableuser_id column,不可为空。当您尝试update记录时,但未设置user_id的值,因此它是null。而且,如上所述,column不可为空。您需要将其设置为可为空,或将其设置为正确的值。