【问题标题】:ActionController::RoutingError (undefined method `attr_accessible')ActionController::RoutingError(未定义的方法 `attr_accessible')
【发布时间】:2014-08-09 07:37:54
【问题描述】:

在 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

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

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

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 保存到数据库中。我该如何解决这个问题?

【问题讨论】:

  • attr_accessible 在 Rails 4 中被贬值了 :)

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


【解决方案1】:

Rails 4.1 不允许批量分配

不要在model 中使用attr_accessible :name,而是使用strong parameters。您将在您的 Controller 中执行此操作:

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

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

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

【讨论】:

  • 我将permitted_params 替换为forum_params。问题已解决。谢谢。
  • 好的...不要使用attr_accessible,因为您已经使用了`强参数
【解决方案2】:

我从forum.rb 中删除了attr_accessible 并更改了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

【讨论】:

    猜你喜欢
    • 2012-03-23
    • 1970-01-01
    • 2014-06-19
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多