2011-11-07 2 views
0

나는이 :공백이 아닌 열 수를 계산하는 방법을 레일로? 내 컨트롤러에서

def sedomain 
country_codes = %w[ dk se com net org info ] 
@domains = { } 
country_codes.each do |cc| 
    @domains[cc.to_sym] = { :navn => ".#{cc}" } 
    end 
render :layout => 'page' 
end 

DK 자체 닷컴 그물 조직 정보 내 도메인 테이블의 열입니다.

나는

나는 이런 식으로 뭔가를하려고 얼마나 많은 빈되지 않은 계산하려면 :

def sedomain 
country_codes = %w[ dk se com net org info ] 
@domains = { } 
country_codes.each do |cc| 
    @domains[cc.to_sym] = { :navn => ".#{cc}", :count => Domain.#{cc}.count } 
    end 
render :layout => 'page' 
end 

그러나 나는 nomethod의 오류가 발생합니다.

+0

는인가? –

+0

도메인입니다. # {cc} .count –

+0

#는 주석을 나타냅니다. tadman의 대답은 다음과 같습니다. count => Domain.send (cc) .count –

답변

2
Domain.count(cc) 

또는

Domain.count(cc, :conditions => ["`#{cc}` IN NOT NULL OR `#{cc}` != ''"]) 
+0

정상적으로 작동합니다. Domain.where ("# {cc.gsub ('.', '')}. not_eq => nil) .count보다 낫지 않습니까? –

7

Ruby에 대한 책을 구해야합니다. 매우 간단합니다. #{...}문자열 및 문자열에만 유용한 보간 기입니다. 이 특정 컨텍스트 외부에서 #은 일반적으로 주석으로 해석되며 나머지 줄은 유효하지 않게 렌더링됩니다. 적절한 문법 - 강조 표시 편집기가이를 나타낼 것이며 심지어 StackOverflow의 코드 형광펜도 이런 식으로 작동합니다.

과 같이 send이 필요합니다. .. => 도메인 # {CC} .count를 계산하거나 :. => 도메인을 계산 "# {CC}"계산

+0

알 수없는 메소드 오류가 발생했습니다 : 정의되지 않은 메소드'dk '가 있습니다. # . 나는 count => Domain.where (: "# {cc.gsub ('.', ''}". not_eq => nil) .count를 사용하는 것으로 계산했습니다. –

+0

'send'를 사용하는 것은 대부분의 경우 복잡한 복잡성 코드 름입니다. – Eric

+0

그것은 기능적인 해결책이며 올바르게 검증 된 입력을 사용하면 잘 작동하지만 구현을 정리할 때 리팩터링하는 것이 가장 먼저해야합니다. 하나의 테스트 가능한 인터페이스에서 유효성 검사 및 위임을 처리하는 메서드로 래핑하면 뛰어난 솔루션입니다. 이 경우'# {...} '과 같이 의도 된 것의 리터럴 번역본입니다. – tadman

관련 문제