>

사용자 표에 언급 된 사용자의 주소로 이메일을 보내기 위해 사용자 쇼 페이지에 버튼을 추가하려고했습니다. 초대 이메일 보내기를 클릭하면정의되지 않은 메소드 '이메일' nil : NilClass의 경우. 내가 겪고있는 실수를 알려주세요.

routes.rb

get 'send_invitation_email', to: 'users#invitation_confirmation'

invitation_confirmation.text.erb

Hi,
Thank you for setting up an account. Please click on the link in that email to start using the system. 
<%= edit_password_reset_url(@user.reset_token, email: @user.email) %>

user_mailer.rb

def invitation_confirmation(user)
    @user = user
    mail(:to => "<#{user.email}>", subject: "Notification")
end

users_controller.rb

def invitation_confirmation
    @user = User.find(params[:id])  
    UserMailer.invitation_confirmation(@user).deliver
    flash[:notice] = "Invitation email has been sent."
    redirect_to user_path(@user)
end

show.html.erb

<% if logged_in? && current_user.admin? || current_user.superadmin? %>
   <%= link_to "Send Invitation Email", send_invitation_email_path(@user), class: "btn btn-xs btn-primary" %>
<% end %>

업데이트

mail(:to => "<#{user.email}>", subject: "Notification")


  • 답변 # 1

    이 오류는 UserMailer.invitation_confirmation 메소드 내부에 사용자가 없음을 나타냅니다.

    시도 :

    def invitation_confirmation(user)
        @user = user
        mail(:to => "<#{@user.email}>", subject: "Notification")
    end
    
    

  • 답변 # 2

    이것을 시도하십시오

    def invitation_confirmation(user)
      mail(to: user.email, subject: "Notification")
    end
    
    

  • 답변 # 3

    @user 객체가 null이 아닌 경우 show.html.erb 코드를 다음과 같이 변경하십시오 :

    <% if logged_in? && current_user.admin? || current_user.superadmin? %>
      <%= link_to "Send Invitation Email", send_invitation_email_path(id: @user.id), class: "btn btn-xs btn-primary" %>
    <% end %>
    
    

  • 답변 # 4

    def invitation_confirmation
        @user = User.find(params[:format]) 
        **@user.create_reset_digest**   
        UserMailer.invitation_confirmation(@user).deliver
        flash[:notice] = "Invitation email has been sent."
        redirect_to user_path(@user)
    end
    
    

    굵은 글씨로 실수했습니다. 나는 _reset_digest를 만들지 않았다. 지금 일하고 있습니다. 모두 감사합니다.

  • 이전 swift - 변수의 세터 만 더 이상 사용하지 않는 방법이 있습니까?
  • 다음 forms - Angular 6 patchValue Not Setting 때때로