복붙노트

[RUBY-ON-RAILS] 루비 블록 구문 오류 [중복]

RUBY-ON-RAILS

루비 블록 구문 오류 [중복]

나는 확실히 나는이 구문 오류를 이해하고 있지 않다. 나는 레일 응용 프로그램의 일부 파일 업로드를 관리하는 Carrierwave을 사용하고, 내가 잘못 방법 중 하나에 블록을 통과 할 것으로 보인다.

여기에 Carrierwave 문서의 예는 다음과 같습니다

version :thumb do
  process :resize_to_fill => [200,200]
end

여기에 내가 가진 무엇 :

version :full   { process(:resize_to_limit => [960, 960]) }
version :half   { process(:resize_to_limit => [470, 470]) }
version :third  { process(:resize_to_limit => [306, 306]) }
version :fourth { process(:resize_to_limit => [176, 176]) }

상기는, 나는 keyword_end 기대, '}'구문 오류, 예기치하지 작업 얻을 않습니다. 흥미롭게도, 다음은 완벽하게 작동합니다 :

version :full   do process :resize_to_limit => [960, 960]; end
version :half   do process :resize_to_limit => [470, 470]; end
version :third  do process :resize_to_limit => [306, 306]; end
version :fourth do process :resize_to_limit => [176, 176]; end

그래서, 내 질문은, 왜 할 일 ... 끝 부분을 사용하여 블록을 전달할 수있다하지만이 경우에 교정기?

감사!

해결법

  1. ==============================

    1.이 시도:

    이 시도:

    version(:full)   { process(:resize_to_limit => [960, 960]) }
    version(:half)   { process(:resize_to_limit => [470, 470]) }
    version(:third)  { process(:resize_to_limit => [306, 306]) }
    version(:fourth) { process(:resize_to_limit => [176, 176]) }
    

    당신은 우선 순위 문제가 있습니다. 메소드 호출보다 DO ... 엔드 블록보다 단단하고 더 단단한 {} 블록 귀속; 결과는 루비 당신이 기호에 인수로 블록을 공급하기 위해 노력하고 더 말한다하고 생각하는 것입니다.

    (?) 당신은 명확를 참조하거나 다음을 비교하여 가능성이 더 익숙 예 수 있습니다 :

    [1, 2, 3].inject 0  { |x, y| x + y }
    [1, 2, 3].inject(0) { |x, y| x + y }
    
  2. from https://stackoverflow.com/questions/6854283/ruby-block-syntax-error by cc-by-sa and MIT license