Rails 3.2.13和strong_parameters异常

时间:2013-04-29 01:05:05

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 strong-parameters

我正在使用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

1 个答案:

答案 0 :(得分:4)

默认配置是在开发和测试环境中记录异常,甚至不在生产中记录异常。所以你看到的是正常的行为,分配失败了。

要提出异常,您需要更改所需环境中的默认值。 例如,config / environments / development.rb:

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

希望有所帮助,