2

ユーザーをリストするための「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
4

1 に答える 1

1

あなたはこれを行うことができます:

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

チェックが理解しやすくなります+インスタンス変数は必要ありませんよね?

ところで、私は次のように感じます:

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

魔法の配列を避けるために、メソッドで指定する必要があります

于 2013-09-06T08:31:22.310 に答える