2014-11-13 2 views
0

Rails 앱에서 연락처 양식을 설정하려고하는데 이메일을 보내고받는 데는 이메일 내용이 비어 있습니다. Rails 앱을 통해 보낸 메일이 비어 있습니다.

그래서 난 단지 내 이메일에 Schreef het volgende 받고 있어요 순간에 이메일

!!! 
%html 
    %body 
    %p 
     = @message.name 
     Schreef het volgende: 
    %p= @message.email 
    %p= @message.message 

의 기관이다.

내 MessagesController

class MessagesController < ApplicationController 

    def create 
     @message = Message.new(message_params) 
     if @message.valid? 
     # TODO send message here 
     Messages.new_messages_email(@messages).deliver 
     redirect_to root_url, notice: "Message sent! Thank you for contacting us." 
     else 
     redirect_to root_url, notice: "Something went wrong, try again!" 
     end 
    end 

    private 
    def message_params 
     params.require(:message).permit(
     :name, 
     :message, 
     :email 
    ) 
    end 
end 

내 메시지 모델

class Message 
    include ActiveModel::Validations 
    include ActiveModel::Conversion 
    extend ActiveModel::Naming 

    attr_accessor :name, :email, :message 

    validates_presence_of :name 
    validates :email, :email_format => {:message => 'is not looking good'} 
    validates_length_of :message, :maximum => 500 

    def initialize(attributes = {}) 
    attributes.each do |name, value| 
     send("#{name}=", value) 
    end 
    end 

    def persisted? 
    false 
    end 
end 

내 메시지 메일러,

class Messages < ActionMailer::Base 
    default from: "[email protected]" 

    def new_messages_email(message) 

    @message = Message.new 
    mail(to: '[email protected]', 
     subject: 'Iemand wilt contact met U') 
    end 
end 

그리고 형태

= form_for @message do |f| 
    .field 
    %br/ 
    = f.text_field :name, :placeholder => "Naam" 
    .field 
    %br/ 
    = f.text_field :email, :placeholder => "Emailadres" 
    .field 
    %br/ 
    = f.text_area :message, :rows => 5, :placeholder => "Uw bericht" 
    .actions= f.submit "Verstuur bericht", :id => "submit" 

이메일을 데이터베이스에 저장하지 않고이 작업을 설정하려고합니다. 필드에 넣은 콘텐츠가 이메일에없는 이유를 아는 사람이 있습니까?

답변

2

이전 문제와 아주 비슷한 문제가 있습니다 :-).

우선, Messages.new_messages_email(@messages).deliver. @messages이 아니라 @message입니다. Second :

class Messages < ActionMailer::Base 
    default from: "[email protected]" 

    def new_messages_email(message) 

     @message = message # See the difference? 
     mail(to: '[email protected]', subject: 'Iemand wilt contact met U') 
    end 
end 
+0

답을 명확히 해 주셔서 감사합니다. 이제 작동 중입니다. 발견해야 할 오류 로그가 없기 때문에이 항목을 버그 수정하기가 상당히 어렵습니다. –

+1

예. Ruby 세계에서는 원하는 인스턴스 변수 (예 :'@ bleh')를 호출 할 수 있으며 간단히'nil'을 반환합니다. 그래서'@ messages'에 대해서 불평하지 않았습니다. 또 다른 것은 당신이 어디에서 건 "message"를 사용하지 않고 단지'@message = Message.new'를 사용했다는 것입니다. static typed language (C, Java)에서는 컴파일러가'messages' 변수에 대해 불평하지만 Ruby는 동적이므로 런타임에 평가됩니다. – blelump

관련 문제