2017-11-13 3 views
0

Hartl 's rails 튜토리얼, 11.2.1 절 메일러 템플릿의 ch11에 있습니다. 비밀번호 재설정 메일러에 대한 미리보기가 제대로 작동하지만 account_activation 미리보기가 작동하지 않습니다. 코드를 변경하지 않아도 실제로 오류가 변경되어 혼란 스러웠습니다. 나는 현재 수신하고있는 오류는 그러나 여기 Hartl 's rails tutorial ch11 : account_activation 메일러 템플릿 미리보기가 작동하지 않는 이유는 무엇입니까?

NoMethodError in Rails::Mailers#preview 

Showing /home/ubuntu/workspace/sample_app/app/views/user_mailer/account_activation.html.erb where line #3 raised: 

undefined method `name' for nil:NilClass 

Extracted source (around line #3) 

<h1>Sample App</h1> 

<p>Hi <%[email protected] %>,</p> 

<p> 
Welcome to the Sample App! Click on the link below to activate your account: 

내 user_mailer.rb (더 코드가 튜토리얼에서 지금까지 지정되지 않은)

class UserMailer < ApplicationMailer 

    def account_activation(user) 
    @user = user 
    mail to: user.email, subject: "Account activation" 
    end 

    def account_activation 
    @greeting = "Hi" 

    mail to: "[email protected]" 
    end 

    def password_reset 
    @greeting = "Hi" 

    mail to: "[email protected]" 
    end 
end 

account_activations_controller.rb

class AccountActivationsController < ApplicationController 
end 
입니다

및 오류 출처 account_activation.html.erb

<h1>Sample App</h1> 

<p>Hi <%[email protected] %>,</p> 

<p> 
Welcome to the Sample App! Click on the link below to activate your account: 
</p> 

<%= link_to "Activate", edit_account_activation_url(@user.activation_token, 
                email: @user.email) %> 

사용자의 이름을 인식하지 못하는 것처럼 보입니다. 왜 이럴 수 있니? (참고 : 모든 코드는 자습서에서 복사되므로 오류의 원인은 손실됩니다.) 감사합니다.

편집 : 의견에 따라 실제로 두 account_activation 메소드가 있습니다. 나는 두 번째 것을 지우고 첫 번째 것을 지켰다. 이제 오류가 인수 오류로 변경되었습니다.

ArgumentError in Rails::MailersController#preview 
wrong number of arguments (given 0, expected 1) 

    def account_activation(user) 
    @user = user 
    mail to: user.email, subject: "Account activation" 
    end 

이 방법은 인수없이 다음 파일에서 사용 된 것 같습니다.

/sample_app/test/mailers/previews/user_mailer_preview.rb에서

class UserMailerPreview < ActionMailer::Preview 

    # Preview this email at http://localhost:3000/rails/mailers/user_mailer/account_activation 
    def account_activation 
    user = User.first 
    user.activation_token = User.new_token 
    UserMailer.account_activation(user) 
    UserMailer.account_activation 
    end 

    # Preview this email at http://localhost:3000/rails/mailers/user_mailer/password_reset 
    def password_reset 
    UserMailer.password_reset 
    end 

end 

답변

2

당신의 UserMailer 당신은 현재 account_activation 방법의 두 버전의 본 - user 매개 변수를 하나하지 않는 두 번째를 . Ruby에서는 같은 이름을 가진 클래스에 두 개의 메소드를 가질 수 없으므로 두 번째 메소드가 이전 메소드를 대체하게됩니다.

이 튜토리얼의 모든 내용에 익숙하지 않지만이 매개 변수가없는 메서드는 튜토리얼의 앞 부분에서 나온 것으로 보아 이제 제거 된 것 같습니다.

그런 다음 UserMailer.account_activation.deliver...으로 전화를 걸면 코드를 확인하고 사용자를 전달할 수 있도록 업데이트해야합니다.


업데이트 user_mailer_preview.rb에서

당신은 두 번 account_activation를 호출 :

... 
UserMailer.account_activation(user) 
UserMailer.account_activation 
... 

user없이 통화가 제거해야합니다.

+0

당신은 내가 이것을 알지 못했다. 그러나, 나는 지금 두 번째를 삭제하고 새로운 오류가 있습니다. ArgumentsError in Rails :: MailersController # 미리보기, 인자의 개수가 잘못됨 (주어진 0, 예상 된 1). 나머지 메소드 (def account_activation (user))는 인수가 필요합니다. 무엇이 실종 될 수 있니? – Owen

+0

자세한 내용은 위의 편집을 참조하십시오. – Owen

+1

그게 전부입니다. 나를 쳐다 보면서. 그것을 믿을 수 없다. 매번! 고맙습니다 – Owen

관련 문제