我正在使用Rails 3.2.13和strong_parameters gem。我想知道当我在开发中测试时是否应该从ActiveModel::ForbiddenAttributes
获得一个引发异常?
我的帖子模型有:title
和: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
答案 0 :(得分:4)
默认配置是在开发和测试环境中记录异常,甚至不在生产中记录异常。所以你看到的是正常的行为,分配失败了。
要提出异常,您需要更改所需环境中的默认值。 例如,config / environments / development.rb:
# Raises an error on unpermitted attributes assignment
config.action_controller.action_on_unpermitted_parameters = :raise # default is :log
希望有所帮助,