我看过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]
显示两个值password
和password_confirmation
,但我在登录页面中使用password
我不知道如何解决这个问题。
答案 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]