Grape:ActiveModel :: ForbiddenAttributesError

时间:2015-10-01 09:53:34

标签: ruby-on-rails strong-parameters grape-api

调用我的API端点时,我收到此错误:

  

ActiveModel :: ForbiddenAttributesError(ActiveModel :: ForbiddenAttributesError):

day_points_api.rb

module V1
  class DayPointsApi < Grape::API
    namespace 'api/v1' do
      resource :points do
        desc 'start all metrik jobs'

        params do
          requires :product, type: String
          requires :type, type: String
          requires :value_at, type: Date

          requires :points, type: Array do
            requires :platform, type: String
            requires :country, type: String
            requires :value, type: Float
          end
        end

        post do
          params[:points].each do |point|
            point_params = point.merge(params.except(:points))
            DayPoint.constantize.import(point_params)
          end
        end
      end
    end
  end
end

显然,这是由StrongParameter引起的 - 但说实话,我已经定义了所需的参数 - 这些参数应该是默认允许的唯一参数。

有一些解决方案using helper methods - 我发现这些解决方案很难看。

这怎么可能?还有其他选择吗?

1 个答案:

答案 0 :(得分:3)

在其他地方搜索互联网后,我在official Grape Docs找到了解决方案 - 这是一个冠军! /讽刺

  

如果你的Rails版本是4.0+并且应用程序使用了   默认模型层的ActiveRecord,你会想要使用   hashie-forbidden_attributes gem。此gem禁用安全性   模型层的strong_params功能,允许你使用   相反,葡萄自己的params验证。

我将此添加到SO中以帮助任何应该像我一样绊倒的人。