【发布时间】:2012-04-27 17:23:37
【问题描述】:
我正在开发一个具有 JSON API 的 Rails 3.2.2 应用程序,我使用了一个 用于插入一些数据的 CLI 客户端。除了作者,它工作正常 模型。当我尝试创建新帖子时(帖子 belongs_to :author 和 作者 has_many :posts) 我收到以下错误:
<h1>
ActiveModel::MassAssignmentSecurity::Error in PostsController#create
</h1>
<pre>Can't mass-assign protected attributes: name</pre>
我对该主题进行了大量研究,但没有找到可行的解决方案 :-(
我使用 attr_accessible 来避免 MassAssignent 错误,它适用于所有人 其他模型,但不适用于“作者”名称属性。
这是作者模型:
class Author < ActiveRecord::Base
attr_accessible :name, :email
extend FriendlyId
friendly_id :name, use: :slugged
# some validations
has_many :posts
#authlogic
acts_as_authentic
# some stuffs
end
实际上,我已禁用 whitelist_attributes 并解决了我的问题 但我想这不是这样做的方便方法(可能 不是一个好主意)。
我的问题是:为什么 attr_accessible 在这里不起作用?如何 我可以在不禁用白名单的情况下解决问题吗?
谢谢,
瑞文
编辑:
创建新帖子的方法:
def create
@post = Post.new(params[:post])
@post.author = current_author
# respond to etc.
end
current_author 使用给定的 API 密钥查找作者。
【问题讨论】:
-
其他机型是否使用
friendly_id?是否有可能“撤销”attr_accessible所做的一些事情?没有检查过,对此一无所知——只是一个想法。 -
感谢您的回答。几乎所有其他模型都使用friendly_id
-
无赖;好的 :) 在类声明中的顺序相同?
-
那么你的表单/代码试图分配什么属性
-
我们需要查看您在尝试创建对象时使用的代码。你使用什么语法?您是通过关联创建对象还是直接通过模型创建对象?
标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 mass-assignment attr-accessible