【问题标题】:Can't mass-assign protected attributes even if I use attr_accessible即使我使用 attr_accessible 也无法批量分配受保护的属性
【发布时间】: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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多