Rails 4:嵌套属性和PG :: NotNullViolation错误

时间:2014-02-02 18:59:18

标签: ruby-on-rails nested-attributes

我有User.rb

的模型accepts_nested_attributes_for :address

user.rb

has_one :address
accepts_nested_attributes_for :address

address.rb

belongs_to :user

当我尝试使用Rails控制台测试时,会发生以下情况

user = User.find(157)

用户负载(1.5ms)SELECT“users”。 FROM“users”WHERE“users”。“id”= $ 1 LIMIT 1 [[“id”,157]] *

#<用户ID:157,姓名:“John Doe”,电子邮件:...

user.address.phone

UserAddress Load(0.8ms)SELECT“addresses”。 FROM“addresses”WHERE“addresses”。“type”IN('UserAddress')AND“addresses”。“user_id”= $ 1 ORDER BY“地址”。“id”ASC LIMIT 1 [[“user_id”,157]]

“1234567”

到目前为止这很好。但是,以下内容不起作用:

user.update(:address_attributes => {:phone  => "888888"})

它抛出

ActiveRecord::StatementInvalid: PG::NotNullViolation: ERROR:  null value in column "user_id" violates not-null constraint

SQL对我没有多大意义

UPDATE "addresses" SET "user_id" = $1, "updated_at" = $2 WHERE "addresses"."type" IN ('UserAddress') AND "addresses"."id" = 128  [["user_id", nil], ["updated_at", Sun, 02 Feb 2014 19:55:07 CET +01:00]]

为什么在我实际更新user_id属性时尝试使用nil更新phone

1 个答案:

答案 0 :(得分:-1)

也许问题是你没有使用正确的ActiveRecord对象?

也许你可以试试:

user.address.update_attributes({phone: "888888"})