我有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
?
答案 0 :(得分:-1)
也许问题是你没有使用正确的ActiveRecord
对象?
也许你可以试试:
user.address.update_attributes({phone: "888888"})