Rails控制器手动清理参数

时间:2016-12-22 10:23:43

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

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

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

目前我正在使用

之类的东西
def validate_xxx_param
  if ['map', 'card'].include?(params[:display_type))
    ...
  else
    ...
  end
end

但是,有更清洁/更好的OOP方式吗?

1 个答案:

答案 0 :(得分:0)

您可以将此验证移至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

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