ActiveModel :: ForbiddenAttributesError + cancan + rails 4 +带有作用域控制器的模型

pra*_*ase 3 activemodel cancan ruby-on-rails-4

我使用cancan(1.6.10)和rails 4.0.0.我有一个名为'App'(没有作用域)的模型和一个控制器Admin :: AppsController(它的作用域.即app/controllers/admin/apps_controller).

控制器代码为

class Admin::AppsController < ApplicationController
  before_filter :authenticate_user!
  load_and_authorize_resource class: App

  def index
  end

  #CRUD methods and some other custom methods
  ...

  private

  def app_params
    params.require(:app).permit(:name, :description, :author, :url_path, :validated, :active, :version)
  end
end
Run Code Online (Sandbox Code Playgroud)

我尝试创建"应用"时遇到错误.

ActiveModel::ForbiddenAttributesError - ActiveModel::ForbiddenAttributesError:
activemodel (4.0.0) lib/active_model/forbidden_attributes_protection.rb:21:in `sanitize_for_mass_assignment'
Run Code Online (Sandbox Code Playgroud)

我补充道

before_filter do
  resource = controller_path.singularize.gsub('/', '_').to_sym
  method = "#{resource}_params"
  params[resource] &&= send(method) if respond_to?(method, true)
end
Run Code Online (Sandbox Code Playgroud)

https://github.com/ryanb/cancan/issues/835#issuecomment-18663815中所述,但仍然出现上述错误.

Ben*_*min 8

使用名称空间.请尝试将您的代码更改为以下代码.在@JiriKolarik建议他的解决方案使用名称空间后,我遇到了同样的问题.我希望它有所帮助.

  before_filter do
    resource = controller_name.singularize.to_sym
    method = "#{resource}_params"
    params[resource] &&= send(method) if respond_to?(method, true)
  end
Run Code Online (Sandbox Code Playgroud)