在Rails中使用lambda从控制器的动作返回控制

时间:2013-04-15 12:34:02

标签: ruby-on-rails controller return dry proc

如何修复此错误?我想要干掉我的控制器,并且在每种方法中我对params []执行完整性检查,确保所有参数都存在。

问题在于lambda的回归。正如定义

def validate_input(parameters)
    return proc {
        if parameters.find_index { |i| i.nil? }
          error_message = {'Error' => 'Please fix some params'}.to_json
          render :json => error_message and return
        end
    }
  end

然后,在我的控制器操作中,我做了:

def action
  ...
  validate_input([my_sane_id, my_other_param]).call
  ...
end

并得到错误:意外返回。

1 个答案:

答案 0 :(得分:2)

def validate_input(*parameters)
  if parameters.any?(&:nil?)
     render :json => { :error => 'Please fix some params' }
     false
  else
     true
  end
end


def action
  ...
  return unless validate_input(my_sane_id, my_other_param)
  ...
end
  1. 您可以使用splat运算符(“*”)将未知数量的参数导入数组

  2. 您可以使用(“任何?”)方法而不是索引(位置)

  3. 如果你只对数组中的每个项目进行函数调用,你可以使用symbol to proc(“&:”)

  4. 如果渲染json

  5. ,则无需调用to_json
  6. 最好使用符号作为哈希键(“:error”)

  7. 你返回true / false表示一切正常,如果错误,只需从行动中返回