【问题标题】:Rails 4 nested_attributes updateRails 4 嵌套属性更新
【发布时间】:2023-03-18 20:18:01
【问题描述】:

仅更新嵌套时出现错误。

我在做什么:

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

【问题讨论】:

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


    【解决方案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' })
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我不会将 user_id 更改为 null。既然我的关联已经有一个 user_id,为什么 Rails 试图改变它?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 1970-01-01
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多