0

我正在开发具有 JSON API 的 Rails 3.2.2 应用程序,并且我使用 CLI 客户端插入一些数据。除了作者模型外,它工作正常。当我尝试创建一个新帖子时(帖子 belongs_to :author 和 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 密钥查找作者。

4

1 回答 1

1

我找到了解决方案!:-)

问题是我使用了acts_as_taggable_on_steroids插件,它在Rails 3.2上不起作用......

由于“作者”是唯一具有 :name 属性的模型,我认为问题来自作者……但问题出在标签模型中(在acts_as_taggable_on_steroid 插件中)。事实上,它的 :name 属性不是“可访问的”。

所以,我使用在 Rails 3.x 上正确工作的acts_as_taggable_on gem ( https://github.com/mbleigh/acts-as-taggable-on )

于 2012-05-01T14:52:51.433 回答