1

Goliath + Grape + Active Record 4.2 + Active Record Migrationsを使用してボイラープレート Web アプリケーションを開発しています。ここに私の移行ファイルがあります

# db/migrate/20150519063210_create_albums.rb
class CreateAlbums < ActiveRecord::Migration
  def change
    create_table :albums do |t|
      t.string :name
      t.string :artist
      t.string :genre
      t.date :published_at
    end
  end
end

そして私のモデル

# app/models/Album
class Album < ActiveRecord::Base
end

そしてぶどうAPI

class ApiV1 < Grape::API
  version 'v1', using: :path
  format :json

  resource 'albums' do
    get '/' do
      Album.all
    end

    post '/' do
      Album.create(params[:album])  # <-- raises ActiveModel::ForbiddenAttributesError
    end
  end
end

いくつかのパラメーターを指定して呼び出すPOST /v1/albums/と、アプリケーションは常にActiveModel::ForbiddenAttributesError. ActiveRecord がActionController::Parameters引数になりたいようですが、Grape はそれを与えますHashie::Mash

env['params']a から aHashに変換する単純な Rack ミドルウェアを実装してからActionController::Parameters使用しようとしましたが、Grape はヘルパー メソッドが呼び出さGoliath::Rack::Paramsれたときにサニタイズするだけです。paramsまた、Grape ミドルウェアを実装して使用して同じことを試みたところ、同じ結果が得られました。

これに関する解決策はありますか、それとも ActiveRecord 3 にダウングレードする必要がありますか?

4

1 に答える 1

0

ActionController::Parametersパラメータを使用してのインスタンスを生成するヘルパーを作成できます。

require 'action_controller/metal/strong_parameters' 

class ApiV1 < Grape::API
  version 'v1', using: :path
  format :json

  helpers do
    def albums_params
      ActionController::Parameters.new(params).require(:album).permit(:attr1, :attr2)
    end
  end

  resource 'albums' do
    get '/' do
      Album.all
    end

    post '/' do
      Album.create(albums_params)
    end
  end
end

または、 hashi-forbidden_​​attributes gemを使用できます。

于 2015-05-19T12:05:30.910 に答える