IT TIP

'respond_to'대 'respond_to?'가 혼동

itqueen 2020. 10. 28. 21:20
반응형

'respond_to'대 'respond_to?'가 혼동


railstutorial.org로 Rails를 배우고 있는데 뭔가 혼란 스럽습니다. 이 장 에서 저자는 respond_to?User 객체에 대한 메소드를 사용 하여 콘솔에서 테스트를 수행하라고 말하고 정상적으로 작동합니다. 그러나 나중에 :encrypted_password속성에 대한 테스트를 작성할 때 그는 respond_to.

호기심으로 respond_to콘솔에서 User 개체를 시도했는데 메서드가 존재하지 않는다는 오류가 발생합니다. 아아, respond_to?대신을 사용하여 테스트를 작성하려고 respond_to하면 테스트가 실행되지 않습니다.

누군가 나에게 차이점을 설명해 주시고 테스트가 왜 실행 respond_to됩니까?


Ruby는 메소드 이름에서 ?!실제 문자로 취급합니다 . respond_to그리고 respond_to?다릅니다. ?이것이 참 또는 거짓으로 응답 해야 함을 나타냅니다 (규칙에 따라 필수 사항이 아님). 구체적으로 특별히:

respond_to?클래스에 특정 메소드가 있는지 감지 하는 Ruby 메소드 입니다. 예를 들면

@user.respond_to?('eat_food')

User클래스에 eat_food메서드 있으면 true를 반환합니다 .

respond_toA는 레일 에있어서 특정 유형의 요청에 응답. 예를 들면 :

def index
  @people = Person.find(:all)

  respond_to do |format|
    format.html
    format.xml { render :xml => @people.to_xml }
  end
end

그러나 제공 한 RailsTutorial 링크 에서 RSpec의 메서드 와 상호 작용 하는 RSpec 메서드를 볼 수 있습니다 . 을 실행하지 않으면 콘솔에서 사용할 수 없습니다 .shouldrespond_torails console test


respond_to?부울 평가입니다. respond_to표시 정보를 결정하는 (일반적으로)를 사용한다. 여기에 더 많은 정보가 있습니다 . respond_to?그렇지 않은 경우가하는 거짓 경우 메소드가 true 존재 반환하는 경우 확인합니다.


이 테스트는 편리한 도우미를 사용하여 사용자에게 더 친숙합니다.

Ruby는 Ruby이므로 respond_to?다음과 같이 호출하면 좋은 오래된 것을 사용할 수 있습니다.

 @user.respond_to?(:encrypted_password).should be_true

respond_to컨트롤러에서 사용되는 다른 것이 있지만 이미 만난 것과는 관련이 없습니다.

참고 URL : https://stackoverflow.com/questions/6849722/confused-about-respond-to-vs-respond-to

반응형