我正在迁移到Rails4,我遇到了一些新的“强参数”功能的麻烦。
在我的UsersController
中,我有:
params.require(:user).permit(:email, :name, :password, :accept_mail_news)
但是如果有人传递了错误的参数,比如
{"user"=>"a dummy string"}
他将获得500:
,而不是400#<NoMethodError: undefined method `permit' for "a dummy string":String>
是否有通用方法在强参数中“检查类型”,还是必须手动完成所有操作?
答案 0 :(得分:3)
我能想到的一种方法是检查params.require(:user)
respond_to?
permit
方法。类似的东西:
# app/controllers/users_controller.rb
def user_params
if params.require(:user).respond_to?(:permit)
params.require(:user).permit(:email, :name, :password, :accept_mail_news)
else
# Raise error, notify users...
end
end
try
也可以是一个选项,如果nil
没有回复params.require(:user)
,则会返回permit
:
# app/controllers/users_controller.rb
def user_params
params.require(:user).try(:permit, :email, :name, :password, :accept_mail_news)
end
答案 1 :(得分:1)
您收到的参数结构取决于提交时页面中运行的HTML,而HTML又是您为应用实施的视图(和支持代码)决定的。如果您正确设计了视图,那么user
值将始终是哈希值,您将不会遇到您描述的问题。