0

Rails 3.2.13 と strong_parameters gem をいじっています。ActiveModel::ForbiddenAttributes開発中のテスト中に例外が発生するかどうかを知りたいですか?

私の投稿モデルには:titleand:contentがありますが、許可から削除する:titleとエラーは発生しませんが、フラッシュ通知で編集ページにリダイレクトされるため、レコードが保存されます。とはいえ、それは当然のことながら を変更しませんでし:titleた。これはデフォルトの動作ですか?

  def post_params
    params.require(:post).permit(:content)
  end

発生した例外を取得するために何か他のことをする必要があるかどうかを知りたかったのです。

Gemfile:

# Gemfile
gem 'rails', '3.2.13'
gem "strong_parameters"

アプリケーション構成:

# config/application.rb
config.active_record.whitelist_attributes = false

投稿モデル:

# post.rb model
class Post < ActiveRecord::Base
  include ActiveModel::ForbiddenAttributesProtection
end

ポストコントローラー:

# post_controller.rb
class PostsController < ApplicationController

  def update
    @post = Post.find(params[:id])
     if @post.update_attributes(post_params)
       redirect_to edit_post_path(@post), flash { success: "Post updated" }
     else
       render "edit"
     end
  end


  private

  def post_params
    params.require(:post).permit(:title, :content)
  end
end
4

1 に答える 1

4

デフォルトの構成では、開発環境とテスト環境で例外をログに記録し、本番環境ではログに記録しません。したがって、表示されているのは通常の動作であり、割り当ては静かに失敗します。

例外を発生させるには、目的の環境でデフォルトを変更する必要があります。たとえば、config/environments/development.rb:

# Raises an error on unpermitted attributes assignment
  config.action_controller.action_on_unpermitted_parameters = :raise  # default is :log

それが役立つことを願って、

于 2013-05-14T11:46:16.217 に答える