PasswordResetsController#update中的ActiveModel :: ForbiddenAttributesError

时间:2013-07-10 10:16:11

标签: ruby-on-rails

我看过Ryan铁路电视剧第274集 我正在使用rails 4并遇到一个问题。

在password_resets_controller.rb

elsif @user.update_attributes(params[:user])

在控制台显示

ActiveModel::ForbiddenAttributesError in PasswordResetsController#update

当我将update_attributes修改为update_attribute时,显示

wrong number of arguments (1 for 2)

params[:user]显示两个值passwordpassword_confirmation,但我在登录页面中使用password

我不知道如何解决这个问题。

3 个答案:

答案 0 :(得分:30)

这是因为Rails 4中的Strong parameters功能。当禁用属性用于批量分配时,将会引发此功能。

您必须允许控制器中的属性。喜欢这个

@user.update_attributes(params.require(:user).permit(:password, :password_confirmation))

答案 1 :(得分:1)

有相同的问题 - 在尝试从Active Admin中对我的任何资源进行任何更改时收到相同的错误消息。强大的参数在模型的控制器中正确列入白名单,但直到查看文档后我才意识到我需要将模型属性包含在app / admin / your_model.rb中的模型中列入白名单。一旦我这样做,所有工作都在Active Admin中正常工作。

应用程序/管理/ your_model.rb

ActiveAdmin.register Your_model do
  permit_params :attribute_1, :attribute_2, :attribute_3, :etc, :etc
end

这适用于我的本地服务器。在将更改推送到git并部署到VPS后,它也在那里工作。确保重新启动应用。在一个案例中,我不得不重新启动我的实例。希望这有助于某人。

答案 2 :(得分:0)

我花了几天的时间想知道为什么我的不工作,但是我几乎按照每个正确答案所建议的那样做了。这是一个传统的代码库,无论谁写回它,然后决定以以下方式进行操作:

def update_params
  params.require(:user).permit(:email, :password)

  params
end

# And it was being called in the following manner
@user.update(update_params[:user])

我花了几天的时间才找到上面的@Santhosh答案,然后在控制台上尝试了它。

我唯一需要做的修复是删除update_params方法中的返回参数,并且仅将update_params传递给调用以进行更新。

def update_params
  params.require(:user).permit(:email, :password)
end

# And it was being called in the following manner
@user.update(update_params) # Remove [:user]