【问题标题】:Rails 4: nested attributes and PG::NotNullViolation ErrorRails 4:嵌套属性和 PG::NotNullViolation 错误
【发布时间】:2014-02-02 18:59:18
【问题描述】:

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

#

user.address.phone

UserAddress Load (0.8ms) SELECT "addresses". FROM "addresses" WHERE "addresses"."type" IN ('UserAddress') AND "addresses"."user_id" = $1 ORDER通过“地址”。“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 属性时,为什么它会尝试用nil 更新user_id

【问题讨论】:

    标签: ruby-on-rails nested-attributes


    【解决方案1】:

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

    也许你可以试试:

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

    【讨论】:

    • accepts_nested_attributes 用于更新直接关系的属性。使用它,您可以使用fields_for 拥有一个表示来自各种模型的属性的表单。
    • 我认为问题涉及accepts_nested_attributes_for的使用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多