Rails:有没有一种方法可以让一个站点只使用一个联系表单,根据它来自哪个页面生成不同的 HTML 电子邮件?

Rails: Is there a way of having only one contact form for a site that generates different HTML emails depending on what page it came from?

我目前正在构建一个 rails 应用程序,想知道是否有一种方法可以简化联系表单流程。最初我打算为主页建立一个联系表,并为 'become a partner' 页面建立一个联系表。每个都有自己的控制器和 html 个电子邮件。然而,这让我想知道是否有一种方法可以让只有一个联系表单和控制器根据提交的页面生成适当的 html 电子邮件?基本上我希望客户收到一封包含 'new message from home page' 或 'new message from become a partner page' 的电子邮件。

我确定有办法,但我很难确定关系。

谢谢


感谢@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: 'justin@socialplayground.com.au'

    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>

它会在联系邮件的主题中,我希望它在主页或合作伙伴注册页面等中说什么

抱歉,再次感谢

贾斯汀

您可以创建部分 _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 %>

最后你可以检查请求来自哪里,以便你可以设置正确的消息。