Rails ActiveModel::ForbiddenAttributesError 该怎么解决?

mmssddss · 2013年02月27日 · 最后由 lebao 回复于 2015年09月16日 · 15794 次阅读

大家好,我在 generate 一个 controller 之后在里面添加代码

def create
  @event = Event.new(params[:event])
  @event.save

  redirect_to :action => :index
end

想实现添加新条目的功能,可是系统提示

ActiveModel::ForbiddenAttributesError

Extracted source (around line #9):    
  end
  def create
    @event = Event.new(params[:event])
    @event.save

    redirect_to :action => :index

不知道是哪里出了问题呢?

mass assignment

#1 楼 @lidashuang 可我是本地的呢~

new 不要带参数,然后逐个写属性。

#3 楼 @chenge 谢谢~我尝试一下~

#3 楼 @chenge 乱说,这不是解决问题的方法!

还有可以详细看一下这篇讨论: http://ruby-china.org/topics/1614

昨天升级 Rails4.0 也遇到了这样的问题,只需要在 create 之前加上 params.permit! 就可以了。 详细可以看 http://edgeapi.rubyonrails.org/classes/ActionController/Parameters.html

#6 楼 @huacnlee 多谢~问题已经解决了呢~

#8 楼 @zfben 谢谢呢~我也是升级了 4.0 才遇到这个问题的~

#9 楼 @mmssddss 请问你这个问题是怎么解决的?我刚好遇到了

12 楼 已删除

@mmssddss 请问你怎么解决这个问题的呢?我是新手

Rails 4 使用的是 Stong paramaters. 不需要再使用 Attr_accessible 了。 @zfben 这个方法不建议使用。 参考代码

class ProductsController < ApplicationController

  def create
    @product = Product.new(product_params)

    if @product.save
      redirect_to @product, notice: 'Product was successfully created.'
    else
      render action: 'new'
    end
  end


  private
  def product_params
      params.require(:product).permit(:name, .... :category)
    end
end

#14 楼 @autumnwolf ,我试了你的方法,rails4 下可用~然后有几个问题:

  1. 如果代码我这样写,rails4 下运行是正常了,如果 rails 的版本是 3,会报错吗?还是照常运行?
  2. 之前你不建议使用params.permit!的考虑是什么?全放开不安全?

补充下:rails 4.0 中出现 ActiveModel::ForbiddenAttributesError: ActiveModel::ForbiddenAttributesError 错误 时 则 需要 方法里面加上 params.permit! 如下: def create params.permit! # render plain: params[:article].inspect @article = Article.new(params[:article])

@article.save redirect_to @article end

需要 登录 后方可回复, 如果你还没有账号请 注册新账号