Попытка выполнить метод на params в Rails - PullRequest
0 голосов
/ 20 августа 2011

Я хочу написать метод, который перебирает все параметры, чтобы убедиться, что они не все пустые.

Мои параметры:

params[:search][:company]
params[:search][:phone]
params[:search][:city]
params[:search][:state]
params[:search][:email]

У меня есть этот метод:

def all_blank_check(params)
  array=[]

  params[:search].each do |key, value|
    array << value unless value.blank?
  end

  if array.count < 1
      return true
  else
     return false
  end
end

Но когда я пытаюсь что-то типа all_blank_check(params), я получаю следующую ошибку:

NoMethodError (undefined method `all_blank_check' for #<Class:0x108c08830>):

Нужно ли сначала преобразовывать параметры в массив?Не могу ли я выполнить метод для параметров?

Правка - полный источник:

        def index
          @customers = Customer.search_search(params)
        end</p>

<code>    def self.search_search(params)
      search_field = []
      search_values = []
      array = []
      test = ''    

      if !params[:search].nil? && all_blank_check(params[:search]


              if !params[:search].nil? && !params[:search][:company].blank?
              search_field << 'customers.company LIKE ?'
              search_values << "%#{params[:search][:company]}%"

              end

              if !params[:search].nil? && !params[:search][:city].blank?
              search_field << 'customers.city = ?'
              search_values << "#{params[:search][:city]}"
              end

              if !params[:search].nil? && !params[:search][:phone].blank?
              search_field << 'customers.phone_1 = ?'
              search_values << "%#{params[:search][:phone]}%"
              end

            conditions = [search_field.join(' AND ')] + search_values

            Customer.where(conditions).includes(:customer_contacts).limit(10)
        end
    end


    def all_blank_check(params)
        params[:search].each do |key, value|
          array << value unless value.blank?
        end

        if array.count < 1
            return false
          end
          if array.count > 1
            return true
        end
    end
</code>

Ответы [ 2 ]

3 голосов
/ 22 августа 2011

Вы также можете использовать более Ruby-ориентированный код, подобный этому:

def self.all_blank?(params)
   params[:search].count{|key, value| !value.blank?} == 0
end

Это подсчитывает значения, которые не являются пустыми;если число равно 0, это означает, что все пусто.Это позволяет избежать создания нового массива только для подсчета.

2 голосов
/ 20 августа 2011

Проблема не в типе params, проблема в том, что метод all_blank_check не существует в объекте, для которого он вызывается.

Вы определили его как метод экземпляра и пытаетесь вызвать его из метода класса search_param, который не будет работать.

Если вы хотите сделать all_blank_check метод класса, вам нужно изменить определение на def self.all_blank_check(params) - так же, как search_param.

...