ruby-on-rails - Rails 4:嵌套属性和 PG::NotNullViolation 错误

标签 ruby-on-rails nested-attributes

我有一个模型 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/

相关文章:

ruby-on-rails - PostgreSQL 所有权错误

ruby-on-rails - _path 的使用给出了 "No route matches.."错误

ruby-on-rails - 如何使用 ruby​​ 2.0 运行 Ruby on Rails 3

ruby-on-rails-3 - 导轨 : radio button selection for nested objects

ruby-on-rails-4 - Rails 4.0 和 Cocoon : nested fields under fields_for don't appear in Edit

ruby-on-rails - 未定义的FactoryGirl transient 变量方法

ruby-on-rails - Rails 的环境变量

ruby-on-rails - 如何在 ActiveRecord 中指定为accepts_nested_attributes_for 设置的字段

arrays - 如何删除mongoDb中的嵌套数组元素