即使我使用attr_accessible,也无法批量分配受保护的属性

时间:2012-04-27 17:23:37

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 mass-assignment attr-accessible

我正在开发一个带有JSON API的Rails 3.2.2应用程序,我使用的是 CLI客户端用于插入一些数据。除作者外,它工作正常 模型。当我尝试创建一个新帖子时(Post belongs_to:author and 作者has_many:帖子)我收到以下错误:

<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密钥查找作者。

1 个答案:

答案 0 :(得分:1)

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

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

自&#34;作者&#34;是唯一具有:name属性的模型,我认为问题来自Author ...但问题出在Tag模型中(在acts_as_taggable_on_steroid插件中)。实际上,它的:name属性不是&#34;可访问&#34;。

所以,我使用acts_as_taggable_on gem(https://github.com/mbleigh/acts-as-taggable-on) 这正确适用于Rails 3.x