【问题标题】:Rails controller manually sanitize parametersRails 控制器手动清理参数
【发布时间】:2016-12-22 10:23:42
【问题描述】:

假设我的视图需要传递一些与模型绝对无关的参数。清理控制器中的输入的最佳方法是什么?

例如 - 验证是否在字符串数组中包含参数:display_type 参数设置搜索结果是显示在地图上还是列表中,如卡片等,但只有少数已定义且可用 - 验证某些参数的类型/数值(例如 params[:page] 应该是一个整数或回退到默认页面 0

目前我正在使用类似的东西

def validate_xxx_param
  if ['map', 'card'].include?(params[:display_type))
    ...
  else
    ...
  end
end

但是有没有更清洁/更好的 OOP 方式来做到这一点?

【问题讨论】:

  • 也许你可以添加一个关注点。

标签: ruby-on-rails ruby-on-rails-5 actioncontroller


【解决方案1】:

您可以将此验证移至Service object

class ValidateXXXParam
  def initialize(param)
    @param = param
  end

  def call
    if ['map', 'card'].include?(@param)
      ...
    else
      ...
    end
  end
end

# call it in controller
ValidateXXXParam.new(params[:display_type]).call

这是保持控制器代码清洁干燥的好方法。

【讨论】:

  • 你会在检查强参数之后/之前调用它吗?您将如何处理验证失败?引发类似于未经允许的参数的异常?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多