我正在将我的 rails 3.2 应用程序从默认的质量分配保护移动到强参数。我在我的 application.rb 中禁用了 *whitelist_attributes* 并在我的模型中添加了所需的 include 语句。
在我的控制器中,我在创建模型时允许适当的属性。
def create
@user = User.new user_params
...
end
protected
def user_params
params.require(:user).permit(:email, :name, :locale, :password, :password_confirmation)
end
这在开发和生产中运行良好。但由于某种原因,在我的测试环境中它坏了。我对创建操作使用功能测试,该操作使用哈希进行简单的发布。我在上面的代码片段的第二行得到一个“堆栈级别太深”。
1) Error:
test_should_get_create(UsersControllerTest):
SystemStackError: stack level too deep
/home/martijn/.rvm/gems/ruby-1.9.3-p448/gems/activesupport-3.2.15/lib/active_support/notifications/instrumenter.rb:23
这不仅发生在我的控制器中。当我在模型或测试代码中调用诸如 update_attributes 之类的函数时,也会发生这种情况。但在开发中它工作正常。
当我删除include ActiveModel::ForbiddenAttributesProtection时它也有效。
有任何想法吗?