在Rails中定义控制器操作的预期参数

时间:2011-01-22 03:51:28

标签: ruby-on-rails parameters

我记得曾经看到能够在控制器顶部定义一个动作需要工作的参数。对于我的生活,我似乎无法再找到任何这种能力,它将对以下内容有用:

def sort
  params[:links].each_with_index do |id, index|
    @link_set.links.in_context(context).update_all(['position=?', index+1], ['id=?', id])
  end
  render :nothing => true
end

我期待params [:links]所以如果一些聪明的人决定在不给我params的情况下访问该动作,那么它就会失败并使用nil.each_with_index。

如果缺少参数,那么优雅地给出404或其他东西是很好的,而不必将其编码到这种类型的每个方法中。

这是否存在? :)

3 个答案:

答案 0 :(得分:3)

实际上,偶然发现了这篇文章:http://rails.nuvvo.com/lesson/6376-action-controller-verification

该方法称为验证,您可以指定期望的参数之类的内容。 :)

答案 1 :(得分:0)

试试这段代码:

before_filter :check_params

private
def check_params
    needed_params=[:links]
    needed_params.each do |x|
        render :text=>"Missing param #{x}", :status=>400
        return
    end

将此代码放在课程的最后。它适用于每一个动作。此外,您要返回错误代码400(错误请求),而不是错误404(找不到文件)。

答案 2 :(得分:-1)

我不记得现有的功能允许你这样做。你可以在行动的顶部使用它:

params[:links] ||= []