Rails4强参数类型检查

时间:2013-12-29 17:36:49

标签: ruby-on-rails ruby-on-rails-4 strong-parameters

我正在迁移到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>

是否有通用方法在强参数中“检查类型”,还是必须手动完成所有操作?

2 个答案:

答案 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值将始终是哈希值,您将不会遇到您描述的问题。