7

我看过 Ryan railcasts 第 274 集我正在使用 rails 4 并遇到了一个问题。

在 password_resets_controller.rb

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

在控制台中显示

ActiveModel::ForbiddenAttributesError in PasswordResetsController#update

当我修改update_attributesupdate_attribute显示

wrong number of arguments (1 for 2)

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

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

4

3 回答 3

32

这是因为 Rails 4 中的强参数特性。当使用禁止属性进行批量赋值时会引发此问题。

您必须允许控制器中的属性。像这样

@user.update_attributes(params.require(:user).permit(:password, :password_confirmation))
于 2013-07-10T10:56:43.223 回答
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 后,它也可以在那里工作。确保重新启动您的应用程序。在一种情况下,我不得不重新启动我的实例。希望这可以帮助某人。

于 2015-12-01T02:29:05.760 回答
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]
于 2020-05-15T22:53:52.137 回答