0

開発モードでメーラーをセットアップするとき、いつも問題に遭遇するように思えます。自分のセットアップに問題は見られません。他の誰かが何かを見ているのではないでしょうか? 連絡先フォームからメールを送信すると、リダイレクトがなく、メールのパラメーターが URL を介して渡され、同じページがレンダリングされます。

http://localhost:3000/contact?utf8=%E2%9C%93&authenticity_token=123456exampletoken%3D&message%5Bname%5D=richard+lewis&message%5Bemail%5D=richlewis14%40gmail.com&message%5Bwebsite%5D=bbc.co.uk&message%5Bmessage%5D=test%0D%0A&commit=Send+Message

わかりましたので、私の開発環境は次のようになります

 #Mailer Config
 config.action_mailer.raise_delivery_errors = true
 config.action_mailer.perform_deliveries = true
 config.action_mailer.default_url_options = { host: "localhost:3000" }


 config.action_mailer.delivery_method = :smtp
 config.action_mailer.smtp_settings = {
 address: "smtp.gmail.com",
 port: 587,
 domain: "gmail.com",
 authentication: "plain",
 enable_starttls_auto: true,
 user_name: "myusername",
 password: "mypassword"
}

コンタクトコントローラーを持っています

class ContactController < ApplicationController

  def new
    @message = Message.new
  end

  def create
  @message = Message.new(params[:message])
   if @message.valid?
    ContactMailer.send_mail(@message).deliver
    redirect_to(root_path, :notice => "Thanks for your message, I will be in touch soon")
       else
        render :new
      end
    end
  end

メーラー

class ContactMailer < ActionMailer::Base
 default from: "richlewis14@gmail.com"

 def send_mail(message)
  @message = message
  mail(to: "richlewis14@gmail.com", subject: "Message From Blog Site")
 end
end

メーラー テキスト ファイル

<p> You have a new Email</p>

<p><%= @contact.name %></p>
<p><%= @contact.email %></p>
<p><%= @contact.website %></p>
<p><%= @contact.message %></p>

メッセージ モデル

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

 attr_accessor :name, :email, :website, :message


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

def persisted?
 false
end
end

そして最後に私のルート

 #CONTACT FORM
 match 'contact' => 'contact#new', :as => 'contact', :via => :get   
 match 'contact' => 'contact#create', :as => 'contact', :via => :post

アップデート

以下の提案にもかかわらず、フォームを投稿できません。取得リクエストをレンダリングし続けます。フォームは次のようになります

  <div id="contact-form-wrap">
    <form id="contact-form">
     <%= form_for @message, :url => contact_path, :method => :post do |f| %>

      <span class="c-note">Asunt in anim uis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in anim id est laborum. Allamco laboris nisi ut aliquip ex ea commodo consequat. Aser velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint</span>

    <div class="contact-left">
     <p class="input-block clearfix">
      <%= f.text_field :name, :id => 'contact_name', :placeholder => 'Name' %>
     </p>

    <p class="input-block">
     <%= f.text_field :email, :id => 'contact_email', :placeholder => 'Email' %>
   </p>

    <p class="input-block last">  
     <%= f.text_field :website, :id => 'contact_url', :placeholder => 'Website' %> 
    </p>
  </div><!--end:contact-left-->


 <div class="contact-right">
  <p class="textarea-block">  
  <%= f.text_area :message, :id => 'contact_message', :rows => 6, :placeholder => 'Message' %>                    
  </p>
</div><!--end:contact-right-->

<div class="clear"></div>                            
  <p class="contact-button clearfix">   
    <%= f.submit 'Send Message', :id => 'submit-contact' %>                 
  </p>
  <div class="clear"></div>   
  <% end %>                     
</form>


 </div><!--contact-form-wrap-->
4

1 に答える 1

3

フォーム (表示されていません) が GET メソッドを使用しており、post である作成ルートと一致していないようです。ビューのフォームを POST を使用するように変更してみてください。create メソッドを呼び出す必要があります。ログを見ると、新しいメソッドを実行していると思います

これを変える。

 <form id="contact-form">
      <%= form_for @message, :url => contact_path, :method => :post do |f| %>

これに

  <%= form_for @message, :url => contact_path, :method => :post, :html => {:id => 'contact-form' } do |f| %> 

最後のものも削除</form>します。form_for ヘルパーがそれをブロックの一部として追加するためです。これにより、ネストされたフォームが削除され、メールを投稿/送信できるようになります。

于 2013-07-17T11:11:08.440 に答える