我正在将我的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 时,它也有效。
有什么想法吗?