0

我正在玩 Rails 3.2.13 和 strong_parameters gem。我想知道在开发测试时是否应该得到一个引发的异常ActiveModel::ForbiddenAttributes

我的 Post 模型有一个:title:content但如果我:title从许可中删除,我不会收到错误消息,但我确实会被重定向回带有 flash 通知的编辑页面,因此它保存了记录。虽然,它并没有改变 ,这是:title理所当然的。这是默认行为吗?

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

我想知道是否需要做其他事情来获得引发的异常。

宝石文件:

# 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 回答