2016-01-03 17 views
1

我正在構建一個Rails應用程序,並且想知道是否有簡化聯繫人窗體過程的方法。最初,我打算爲主頁創建一個聯繫表單,併爲'成爲合作伙伴'頁面提供聯繫表單。每個人都有自己的控制器和html電子郵件。然而,它讓我想知道是否有一種方法,只有一個聯繫人表單和控制器根據提交的頁面生成適當的html電子郵件?基本上,我希望客戶收到一封電子郵件,其中包含'主頁中的新郵件'或'成爲合作伙伴頁面的新郵件'。Rails:根據頁面來自哪個頁面,有沒有一種方法可以讓一個網站只生成一個不同的HTML電子郵件?

我確定有一種方法,但我很難解決這種關係。

感謝


感謝@cristiano您的答覆,真的很感激。我不認爲你可以爲我準備好嗎?此刻我正在做一些戰鬥。下面是我的文件:

contacts_controller.rb

class ContactsController < ApplicationController 

    def new 
     @contact = Contact.new 
    end 

    def create 
     @contact = Contact.new(contact_params) 

     if @contact.save 
      flash[:success] = "Message Sent!" 
      redirect_to new_contact_path 
     else 
      flash[:danger] = "Error occurred" 
      redirect_to new_contact_path 
     end 
    end 

    private 
     def contact_params 
      params.require(:contact).permit(:name, :phone, :email, :comments) 
     end 
end 

contact.rb

class Contact < ActiveRecord::Base 
    validates :name, presence: true 
    validates :email, presence: true 

    after_create :send_email 

    private 
     def send_email 
      ContactMailer.contact_email(self).deliver 
     end 
end 

contact_mailer.rb

class ContactMailer < ActionMailer::Base 
    default to: '[email protected]' 

    def contact_email(contact) 
     @contact = contact 

     mail(from: @contact.email, subject: 'Contact Form Message').deliver 
    end 

end 

contact_email.html.erb

<!DOCTYPE Html> 
<html> 
    <head> 
     <title></title> 
    </head> 
    <body> 

     <p>New message from RuNpiXelruN's Contact Form!, from <%= "#{@contact.name}, #{@contact.email}" %></p> 
     </br> 
     <p><%= @contact.name %></p> 
     <p><%= @contact.phone %></p> 
     <p><%= @contact.comments %></p> 

    </body> 
</html> 

這將會是在接觸郵包的主題哪兒ID希望它從主頁或從合作伙伴註冊頁面等說

很抱歉,但再次感謝

賈斯汀

回答

3

您可以創建一個局部_form.html.erb並隨時隨地撥打電話。

在控制器內部,您可以通過調用request.original_url來檢查請求的來源。

因此您home.html.erb可能是

<HTML for home page> 
<%= render 'form' %> 
<more HTML for home page> 

become_a_partner.html.erb可能是

<HTML for partner page> 
<%= render 'form' %> 
<more HTML for partner page> 

_form.html.erb可能是

<%= form_for(@contact) do |f| %> 
    <%= f.text_field :nome %> 
    <%= f.text_field :email %> 
    <%= f.text_area :message %> 
<% end %> 

最後,你可以從那裏請求來讓你檢查可以設置適當的信息。

+0

@cristiano_alencar感謝您的回覆克里斯蒂亞諾!我從來不知道這個請求....方法,其中有很多,這真的很有用。我已經閱讀了一些文檔,但只是想與你覈對一下,基本上我會在我的控制器中有一個條件,如果request.original_url = http:// ....然後發送這個html電子郵件,否則這是,是嗎? – RuNpiXelruN

+0

如果您的電子郵件僅因郵件而異,則可以設置@message變量,以便將其傳遞給您的ActionMailer。如果你的電子郵件是完全不同的,那麼你應該使用不同的電子郵件來定義你的ActionMailer中的不同方法,這樣你就可以發送不同的電子郵件。 –

+0

嗨@cristiano_alencar,請參閱我上面的修改。再次感謝。 – RuNpiXelruN

相關問題