복붙노트

[RUBY-ON-RAILS] 레일 : named_scope, 람다 및 블록

RUBY-ON-RAILS

레일 : named_scope, 람다 및 블록

나는 다음과 같은 두 개의 동등한 생각했다 :

named_scope :admin, lambda { |company_id| {:conditions => ['company_id = ?', company_id]} }

named_scope :admin, lambda do |company_id| 
  {:conditions => ['company_id = ?', company_id]}
end

하지만 루비는 불평이다 :

ArgumentError: tried to create Proc object without a block

어떤 아이디어?

해결법

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

    1.그것은 파서 문제입니다. 이 시도

    그것은 파서 문제입니다. 이 시도

    named_scope :admin, (lambda do |company_id| 
      {:conditions => ['company_id = ?', company_id]}
    end)
    
  2. ==============================

    2.나는 {...} 문제가 사이의 우선 순위의 차이에 관련이있을 수 있습니다 생각 할 ... 끝

    나는 {...} 문제가 사이의 우선 순위의 차이에 관련이있을 수 있습니다 생각 할 ... 끝

    여기에 몇 가지 SO 토론이있다

    내가 변수에 람다를 할당 생각 (발동 될 것이다)는 DO와 함께 할 수 ... 말 :

    my_proc = lambda do 
      puts "did it"
    end
    my_proc.call #=> did it
    
  3. ==============================

    3.당신은 루비 1.9 이상 1에 있다면, 당신은 람다에서 "도둑질"블록에서 메서드 호출을 방지하기 위해 충분히 높은 우선 순위를 가지고 람다 문자 (구문 화살표)를 사용할 수 있습니다.

    당신은 루비 1.9 이상 1에 있다면, 당신은 람다에서 "도둑질"블록에서 메서드 호출을 방지하기 위해 충분히 높은 우선 순위를 가지고 람다 문자 (구문 화살표)를 사용할 수 있습니다.

    named_scope :admin, ->(company_id) do 
      {:conditions => ['company_id = ?', company_id]}
    end
    

    제 1 안정 루비 1.9.1 릴리스 2009-01-30이었다.

  4. ==============================

    4.내가 말할 수있는 그것은 어떤 우선 순위에 관련이

    내가 말할 수있는 그것은 어떤 우선 순위에 관련이

    1.upto 3 do # No parentheses, block delimited with do/end
      |x| puts x 
    end
    
    1.upto 3 {|x| puts x } # Syntax Error: trying to pass a block to 3!
    
  5. from https://stackoverflow.com/questions/1476678/rails-named-scope-lambda-and-blocks by cc-by-sa and MIT license