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 %>
最后你可以检查请求来自哪里,以便你可以设置正确的消息。
我目前正在构建一个 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 %>
最后你可以检查请求来自哪里,以便你可以设置正确的消息。