2016-09-10 3 views
6

Devise 코드를 살펴본 결과 대부분의 컨트롤러가 리소스를 생성한다는 사실을 알았습니다.Devise 컨트롤러에서 'yield resource'는 무엇을합니까?

class Devise::RegistrationsController < DeviseController 
    # ... 
    def create 
    build_resource(sign_up_params) 

    resource.save 
    yield resource if block_given? 
    # ... 

이것은 일종의 확장 기능이어야하지만 실제로 컨트롤러 동작에 블록을 전달하는 방법을 모르겠습니까?

참고 :이 질문은 Ruby의 블록이 작동하는 방식이 아니라 Rails 요청주기에서 실제로 수행하는 방법에 대한 것입니다.

+0

http://mudge.name/2011/01/26/passing-blocks-in-ruby-without-block.html – Jonathan

+0

@ 조나단 오른쪽 있지만, 여전히 블록을'Devise :: RegistrationsController # create'에 전달하는 방법을 설명하지 않습니다. AFAIK 그것은 라우터에 의해 호출됩니다. – max

+0

실수가 아닌 경우 Ruby의 모든 메소드에 블록을 전달할 수 있습니다. 그냥 시도 해 봐. 마지막 인수 인 한 – Jonathan

답변

14

하위 클래스가 devise가 제공 한 create 구현을 재사용 할 수 있도록 허용하지만 프로세스에 연결할 수 있습니다.

예를 들어 당신이

같은있을 수 있습니다
class MyRegistrations < Devise::RegistrationsController 
    def create 
    super { |resource| ... } 
    end 
end 
+0

확인. 그것은 왜 'yield resource if block_given?'이라고 쓰여졌는지 설명하고, 변수가 전달되면 그것을 호출 할 것이다. –

+0

예 @FabrizioBertoglio. 그렇지 않으면 로컬 점프 오류가 발생합니다. – max

+0

@max 고마워요! –

관련 문제