验证控制器中查询字符串参数的正确方法?

时间:2013-09-06 08:16:48

标签: ruby-on-rails ruby-on-rails-3

我有一个名为'index'的用户控制器和方法,用于列出用户。并且在视图中有一个过滤选项(状态挂起,活动,已删除)。我编写了代码并且工作正常。但我需要知道我写的代码是否正确,或者是任何简单的代码编写方法。这是验证控制器中状态的正确方法(验证查询字符串状态是否包含在一组状态中)。请帮忙

我使用了以下代码:

class UsersController < ApplicationController
  def index
     @filter_field = ''
     if ((not params[:status].nil?) && ['pending', 'active', 'deleted'].include?(params[:status]))
      @filter_field = params[:status]
    end
    @users      = User.select_all(@filter_field)
  end
end

class User < ActiveRecord::Base 
  def self.select_all filter
    if filter.empty?    
      User.find(:all)
    else
      User.find(:all, :conditions => ['status = ?', filter]))      
    end
  end
end

1 个答案:

答案 0 :(得分:1)

你可以这样做:

def index
  filter = %w(pending active deleted).include?(params[:status]) ? params[:status] : ''
  @users = User.select_all(filter)
end

它使检查更容易理解+不需要实例变量吗?

顺便说一句,我觉得:

['pending', 'active', 'deleted']

应该通过一种方法给出,以避免魔术数组