将动态主题传递给 Rails mail_form
Passing dynamic subject to Rails mail_form
我正在使用 gem mail_form 处理 Rails 应用程序中的联系人,我有 6 种不同的联系方式。
我在表格中放了一个 hidden_field_tag 并将所需的主题作为变量传递。在 html 中,值在那里,但 到达的电子邮件带有(无主题)。我做错了什么?
在控制器中
def where_to_buy
@contact = Contact.new
@the_subject = "Where to buy"
end
在联系表中
= form_for @contact do |f|
= render "form", f: f
= f.text_area :message
.hide
= f.text_field :nickname, hint: 'Leave this field empty!'
= hidden_field_tag :mail_subject, @the_subject
= f.submit "Send Message"
模型中
class Contact < MailForm::Base
attribute :mail_subject
attribute :first_name, validate: true
attribute :last_name, validate: true
attribute :message, validate: true
attribute :nickname, captcha: true
def headers
{
subject: %(#{mail_subject}),
to: "jorge@email123.com",
from: %("#{first_name} #{last_name}" <#{email}>)
}
end
end
在chrome中输出html:
<input type="hidden" name="mail_subject" id="mail_subject" value="Where to buy">
而不是:
= hidden_field_tag :mail_subject, @the_subject
您将要使用:
= f.hidden_field :mail_subject, value: @the_subject
如果您检查登录到 development.log
中的参数,您就会明白原因。
当您使用 hidden_field_tag
时,mail_subject
被定义为它自己的独立参数,不会包含在 contact
散列中。你会有这样的东西:
params = { "contact" => { "message" => "text here", ... }, "mail_subject => "Where to buy" }
但是当您使用 f.hidden_field
时,mail_subject
将包含在 contact
散列中。你会有这样的东西:
params = { "contact" => { "message" => "text here", "mail_subject => "Where to buy", ... } }
然后当您调用 Contact.new(params[:contact])
时,新的联系人对象将获得 mail_subject
值。
我正在使用 gem mail_form 处理 Rails 应用程序中的联系人,我有 6 种不同的联系方式。
我在表格中放了一个 hidden_field_tag 并将所需的主题作为变量传递。在 html 中,值在那里,但 到达的电子邮件带有(无主题)。我做错了什么?
在控制器中
def where_to_buy
@contact = Contact.new
@the_subject = "Where to buy"
end
在联系表中
= form_for @contact do |f|
= render "form", f: f
= f.text_area :message
.hide
= f.text_field :nickname, hint: 'Leave this field empty!'
= hidden_field_tag :mail_subject, @the_subject
= f.submit "Send Message"
模型中
class Contact < MailForm::Base
attribute :mail_subject
attribute :first_name, validate: true
attribute :last_name, validate: true
attribute :message, validate: true
attribute :nickname, captcha: true
def headers
{
subject: %(#{mail_subject}),
to: "jorge@email123.com",
from: %("#{first_name} #{last_name}" <#{email}>)
}
end
end
在chrome中输出html:
<input type="hidden" name="mail_subject" id="mail_subject" value="Where to buy">
而不是:
= hidden_field_tag :mail_subject, @the_subject
您将要使用:
= f.hidden_field :mail_subject, value: @the_subject
如果您检查登录到 development.log
中的参数,您就会明白原因。
当您使用 hidden_field_tag
时,mail_subject
被定义为它自己的独立参数,不会包含在 contact
散列中。你会有这样的东西:
params = { "contact" => { "message" => "text here", ... }, "mail_subject => "Where to buy" }
但是当您使用 f.hidden_field
时,mail_subject
将包含在 contact
散列中。你会有这样的东西:
params = { "contact" => { "message" => "text here", "mail_subject => "Where to buy", ... } }
然后当您调用 Contact.new(params[:contact])
时,新的联系人对象将获得 mail_subject
值。