ActionController :: RoutingError(未定义的方法`attr_accessible')

时间:2014-08-09 07:37:54

标签: ruby-on-rails ruby-on-rails-4

在rails项目中,我使用inherited_resources 1.5.0 gem。我有以下型号:

forums_controller.rb

class ForumsController < InheritedResources::Base
  respond_to :json
  skip_before_filter  :verify_authenticity_token
  def permitted_params
    params.permit(vocabulary: [:name])
  end
end

forum.rb

class Forum < ActiveRecord::Base
  attr_accessible :name
end

现在,当我想创建新论坛时,我将params发布到rails项目,在这种状态下,我遇到了一个问题:

当我在论坛模型(attr_accessible :name)中使用forum.rb时,我在服务器日志中出现以下错误,论坛不保存到数据库:

Started GET "/forums" for 127.0.0.1 at 2014-08-09 11:51:42 +0430

ActionController::RoutingError (undefined method 'attr_accessible' for #<Class:0x000000064c0468>):
  app/models/forum.rb:2:in '<class:Forum>'
  app/models/forum.rb:1:in '<top (required)>'
  app/controllers/forums_controller.rb:3:in '<top (required)>'

当我在论坛模型中删除attr_accessible :name时,新论坛会使用empty name保存到数据库。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

Rails 4.1不允许进行质量分配

而不是attr_accessible :name中的model,请使用strong parameters。您将在Controller

中执行此操作

根据您的强参数控制器代码

 def permitted_params
   params.require(:forum).permit(:name)
end

然后在控制器操作中调用permitted_params方法。

答案 1 :(得分:0)

我从attr_accessible删除了forum.rb并更改了forums_controller.rb

forums_controller.rb

class ForumsController < InheritedResources::Base
  respond_to :json

  #replace permitted_params with forum_params
  #the name have to similar to controller name
  def forum_params
    params.require(:forum).permit(:name)
  end
end

forum.rb

class Forum < ActiveRecord::Base
  #some validation
end
相关问题