gpt4 book ai didi

ruby-on-rails - ActiveModel::MassAssignmentSecurity::Error: 无法批量分配 protected 属性

转载 作者:行者123 更新时间:2023-12-03 10:18:46 25 4
gpt4 key购买 nike

如果我尝试执行以下代码:

hassle = rota.hassles.create(:sender => user1, :receiver => user2, :type => "sms")

我得到以下错误:
Failure/Error: hassle = rota.hassles.create(:sender => user1, :receiver => user2, :type => "sms")
ActiveModel::MassAssignmentSecurity::Error:
Can't mass-assign protected attributes: type

我不确定这意味着什么。我已将 :type 设为强制,所以如果我删除它,我会收到一个 sql 错误。

最佳答案

一些事情:

批量分配通常意味着将属性传递到创建对象的调用中,作为属性散列的一部分。也就是说,您将散列中的一堆属性传递到创建新对象的调用中。例如:

@user = User.create({:name => "My name", :user_type => "nice_user"})

但是,Rails 包含一些基本的安全规则,这意味着默认情况下并非所有属性都可以通过这种方式分配。您必须事先指定哪些可以。你这样做:
class User < ActiveRecord::Base
attr_accessible :name, :user_type
end

如果不指定属性是 attr_accessible ,然后将其传入以创建对象,则会收到您发布的错误。

以下是更多详细信息:

http://api.rubyonrails.org/v3.2.9/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html

另一种方法是在您第一次创建记录时设置一些属性,然后设置其他属性——像这样:
# In this example `user_type` is not attr_accessible so it needs to be set specifically
@user = User.create({:name => "My name"})
@user.user_type = "nice_user"
@user.save

此外,如果您在使用列名 type 时遇到问题由于 rails 感到困惑并认为您想使用单表继承 (STI),请查看此问题的答案以了解如何解决此问题: http://guides.rubyonrails.org/

关于ruby-on-rails - ActiveModel::MassAssignmentSecurity::Error: 无法批量分配 protected 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10574957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com