2011-08-20 2 views
0

모든 매개 변수가 모두 비어 있지 않은지 확인하기 위해 모든 매개 변수를 반복하는 메소드를 작성하고 싶습니다.레일에서 params에 대한 메소드 수행 시도

내 PARAMS은 다음과 같습니다

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

나는이 방법이 있습니다

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

내가해야합니까 :

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)처럼 뭔가를하려고 할 때 매개 변수를 먼저 배열로 변환 하시겠습니까? params에 대한 메소드를 수행 할 수 있습니까?

편집 - 전체 소스 :

 
     def index 
      @customers = Customer.search_search(params) 
     end

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

+0

전체 소스 코드보기 –

답변

2

문제는 params의 형식이 아닙니다은 문제는 당신이 그것을 호출하는 객체에 존재하지 않는 all_blank_check 방법.

인스턴스 메소드로 정의 했으므로 작동하지 않는 클래스 메소드 search_param에서 호출하려고합니다.

all_blank_check을 클래스 메소드로 만들려면 정의를 def self.all_blank_check(params) - search_param과 같이 변경해야합니다.

+0

굉장한! 나는 검색을 위해서만 (Customer.find) 클래스 메소드를 생각했고, 오늘 정말로 뭔가를 배웠다. 고마워! – fatfrog

3

당신은 또한이 같은 더 많은 루비 생각을 가진 코드를 사용할 수 있습니다 :이 비어 있지 않은 값을 계산

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

; 숫자가 0이면 모두 비어 있음을 의미합니다. 계산을 위해 새 배열을 만들지 않습니다.

+0

내일 직장에서이 작은 보석을 선보일거야! : D – fatfrog

+0

또는 더 좋은'params [: search] .values.all? (& : blank?)' – dira

관련 문제