我有一个模型 User.rb
accepts_nested_attributes_for :address
用户.rb
has_one :address
accepts_nested_attributes_for :address
地址.rb
belongs_to :user
当我尝试使用 Rails 控制台对其进行测试时,会发生以下情况
user = User.find(157)
用户负载(1.5 毫秒)SELECT "users". FROM "users"WHERE "users"."id"= $1 LIMIT 1 [["id", 157]]*
#
user.address.phone
UserAddress Load (0.8ms) SELECT "addresses". FROM "addresses"WHERE "addresses"."type"IN ('UserAddress') AND "addresses"."user_id"= $1 ORDER BY "addresses"."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]]
为什么当我实际更新 phone
属性时它会尝试将 user_id
更新为 nil
?
最佳答案
也许问题在于您没有使用正确的 ActiveRecord
对象?
也许你可以试试:
user.address.update_attributes({phone: "888888"})
关于ruby-on-rails - Rails 4:嵌套属性和 PG::NotNullViolation 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21514808/