web-dev-qa-db-ja.com

POSTを取得して400の不正なリクエストを返す

アソシエーションを介して新しいモデルを作成するcreateメソッドがあり、POSTリクエストにパラメータがなかった場合、テキストを含む400レスポンスを返すと予想していました。ただし、エラーが発生します。 。

これはRails 4.0.2

コントローラーメソッド:

  def create
    @cast_profile = current_user.build_cast_profile(cast_profile_params)
    if @cast_profile.save
      redirect_to cast_profile_path
    else
      render :edit
    end
  end

  def cast_profile_params
    params.require(:cast_profile).permit(:name, :email, :public)
  end

Paramsを渡しても問題ないのに、悪いリクエストシナリオをテストしようとしています。エラーは次のとおりです。

ActionController::ParameterMissing: param not found: cast_profile

私はそれを明示的に救うことができましたが、強力なパラメーターがそれを自動的に行うことになっていると思いました。

24
kjs3

動作は次のとおりです。

許可されていないキーの処理

デフォルトでは、明示的に許可されていないパラメーターキーは、開発およびテスト環境に記録されます。他の環境では、これらのパラメーターは単にフィルターで除外され、無視されます。

さらに、この動作は、環境ファイルのconfig.action_controller.action_on_unpermitted_pa​​rametersプロパティを変更することで変更できます。 :logに設定すると、許可されていない属性がログに記録され、:raiseに設定すると、例外が発生します。

ソース

この例外から400ステータス(Bad Request)で救済することをお勧めします。

rescue_from ActionController::ParameterMissing do
  render :nothing => true, :status => :bad_request
end
44
Bart