【问题标题】:Can't mass-assign protected attributes无法批量分配受保护的属性
【发布时间】:2011-09-04 01:26:19
【问题描述】:

更新代码格式以便更好地查看。

伙计们,

我一直在看这个,但我不明白这里可能会出现什么问题。我正在使用设计。

class User < ActiveRecord::Base
  has_many :addresses
  accepts_nested_attributes_for :addresses

  # Other stuff here
end

class Address < ActiveRecord::Base

  belongs_to :user

  validates_presence_of :zip #:street_address1, 

结束

-------- 日志输出开始------------ ------

在 127.0.0.1 开始 POST "/users" 2011-05-28 11:43:27 -0700 处理 通过 RegistrationsController#create as HTML 参数:{"utf8"=>"√", "authenticity_token"=>"CEmdqlsmdYa6Jq0iIf5KAxxISsUCREIrFNXWkP80nhk=", "用户"=>{"电子邮件"=>"a2@gmail.com", "密码"=>"[过滤器]", "addresses_attributes"=>{"0"=>{"street_address1"=>"234 Pitkin Ct.", "zip"=>"12456"}}}, “提交”=>“注册”} 警告:不能 批量分配受保护的属性: 地址_属性 SQL (0.0ms) BEGIN SQL (164.0ms) 显示表
用户负载 (0.0ms) SELECT users.id 来自users 哪里(users.email = BINARY 'a2@gmail.com') 限制 1 个 SQL (1.0ms) 回滚

-------- 日志输出结束------------ ------

发布的数据中存在 zip,并且发布的数据似乎格式正确。在网页表单上,我收到“地址 zip 不能为空白”的错误。我已经研究了导致“无法批量分配受保护属性”警告的原因,但没有找到任何对我有帮助的东西。

感谢您的想法和指点。

-S

【问题讨论】:

    标签: ruby-on-rails nested-attributes mass-assignment


    【解决方案1】:

    SpecificModel 内部(appfolder/app/model/specific_model.rb

    尝试使用

    attr_accessible :addresses_attributes, :another_attribute_to_make_mass_assignable, :another_attribute, etc.

    【讨论】:

    • 试过 attr_accessible :street_address1, :zip, :address_attributes 但得到同样的错误。
    【解决方案2】:

    只需在模型中包含 数据字段,如下所述

    attr_accessible :addresses_attributes
    

    【讨论】:

      【解决方案3】:

      现在(2013 年 4 月)您应该开始使用 https://github.com/rails/strong_parameters

      【讨论】:

        【解决方案4】:

        看看这里并学习:)

        http://railscasts.com/episodes/26-hackers-love-mass-assignment


        编辑:

        拥有accepts_nested_attributes_forin User 模型使您能够将数据发送到 Address 模型。

        然后,在地址模型中,你必须设置请求的attr_accessible

        【讨论】:

        • 感谢@apneadiving 的反馈。我浏览了 railscasts 剧集,它证实了我对 attr_accessible 的理解。我在我的地址模型中打开它(通过取出 attr_accessible),所以我不会有任何问题。我将它添加回“attr_accessible :street_address1, :zip, :address_attributes”,但仍然出现相同的错误。我过去曾这样做过,并且从未在 :nestedclass_attributes 上声明 attr_accessible - 我想知道设计以某种方式在导致此问题的背面做了一些事情。
        • 尝试了“attr_accessible :address_attributes”和“attr_accessible :addresses_attributes”
        • 在您的用户模型中:attr_accessible : addresses_attributes,在您的地址模型中:attr_accessible :zip, :street_address_1
        • 确实,Devise 在您的 User 模型中设置了一些 attr_acessible,您必须保留它们并添加您需要的其他。
        • 感谢@apneadiving。我将“attr_accessible:addresses_attributes”添加到用户模型而不是我添加的地址模型,这似乎有效!
        猜你喜欢
        • 1970-01-01
        • 2012-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多