我有一个使用Grape的ruby应用程序,它没有轨道。
class Article < ActiveRecord::Base
end
class API::Articles < Grape::API
post '/articles' do
article = Article.create(params[:article])
end
end
Article.create
提供ActiveModel::ForbiddenAttributesError:
有一些关于它的讨论 here,但我不知道 明白它。我试过这个建议:
post '/articles' do
article = Article.create(permitted_params[:article])
represent(article, env)
end
helpers do
def permitted_params
@permitted_params ||= declared(params, include_missing: false)
end
end
此时@permitted_params
为空,因此属性消失。
我还尝试用ActionController::Parameters
包装哈希值,但这会因其他错误而失败。
目前在Grape中解决ForbiddenAttributesError
的建议解决方案是什么?
Grape为params
使用hashie gem,而their solution为此包含一个名为hashie_rails的gem,但是这个gem带来了所有的rails,但我不想要任何那。所以我需要一个香草解决方案。
答案 0 :(得分:0)
https://gist.github.com/smd686s/6320643
Gemfile
gem "actionpack", "~> 4.0.0"
app.rb
require 'rack/test'
require 'action_controller/metal/strong_parameters'
#https://github.com/rails/rails/blob/master/actionpack/test/controller/parameters/parameters_require_test.rb
module Application
class API < Grape::API
helpers do
def item_params
ActionController::Parameters.new(params).require(:item).permit(:attribute)
end
end
desc "Create an item."
post :items do
Item.new item_params
end
end
end
答案 1 :(得分:0)
您需要使用hashie-forbidden_attributes中提到的grape documentation gem:
此外,如果您的Rails版本是4.0+并且应用程序使用ActiveRecord的默认模型层,您将需要使用hashie-forbidden_attributes gem。此gem在模型层禁用了strong_params的安全功能,允许您使用Grape自己的参数验证。