所以我遵循了这个非常有缺陷的教程: http://matharvard.ca/posts/2011/aug/22/contact-form-in-rails-3/
......制作联系表格。它很棒。唯一的问题是它只发送主题。我想也许问题出在通知邮件中:
notifications_mailer.rb
class NotificationsMailer < ActionMailer::Base
default :from => "noreply@youdomain.dev"
default :to => "you@youremail.dev"
def new_message(message)
@message = message
mail(:subject => "[YourWebsite.tld] #{message.subject}")
end
end
我当然希望发送用户提交的所有信息...(姓名,电子邮件地址,主题和正文。
另外,我想知道如何只用主体设置为默认值的身体来做一个简单的版本。 (我希望有一个小评论框,可以通过评论向我发送电子邮件。)我是否必须为此制作一个全新的控制器和模型,或者这可以同时处理这两个?
更新
通知邮件程序视图/ new.html.erb
Name: <%= @message.name %>
Email: <%= @message.email %>
Subject: <%= @message.subject %>
Body: <%= @message.body %>
联络管理员
class ContactController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new(params[:message])
if @message.valid?
NotificationsMailer.new_message(@message).deliver
flash[:success] = "Message was successfully sent."
redirect_to(root_path)
else
flash[:error] = "Please fill all fields."
render :new
end
end
end
message.rb
class Message
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :email, :subject, :body
validates :name, :email, :subject, :body, :presence => true
validates :email, :format => { :with => %r{.+@.+\..+} }, :allow_blank => true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
基本上它有效......但它只发送主题。我还得到它发送一次完整的邮件一切但是主题...但我不记得我是怎么做的。
我应该把这台电脑粉碎成一百万块然后继续横冲直撞吗?
唉...
再次更新
这是电子邮件对上述设置所说的内容:
主题:[liquid.radio]无论主题是什么。身体:完全 空白
这是他们在两周前所做的事后所说的。
Subject: Message from liquid.radio
Body:
A contact enquiry was made by Richard Pryor at 2013-06-17 23:36.
Reply-To: richard@pryor.com
Subject: Scared for no reason Body: Oh
no... Oh God no! What is that?!
我所做的只是搞乱了通知控制器。虽然我不记得......为了我的生活...我做了什么。但是,正如你所看到的......它发送了应该完整的信息......但却是一个完全不同的主题。
在这里真的需要帮助。
答案 0 :(得分:1)
首先,此项目将生产设置放在config/application.rb
中。将GMail ActionMailer设置移至config/environments/production.rb
。将letter_opener
gem添加到Gemfile的开发组。
# Gemfile
group :development do
gem 'letter_opener'
end
将letter_opener设置添加到开发环境中。
# config/environments/development.rb
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config.action_mailer.delivery_method = :letter_opener
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
添加active_attr
gem
# Gemfile
gem 'active_attr'
确保您运行bundle install
使用强大的ActiveAttr实现替换您的消息模型。
# app/models/message.rb
class Message
include ActiveAttr::Model
attribute :name
attribute :email
attribute :subject
attribute :body
validates_presence_of :name, :email, :subject, :body
validates :email, :format => { :with => %r{.+@.+\..+} }, :allow_blank => true
end
改善路线。
# config/routes.rb
get 'contact' => 'contact#new', :as => 'contact'
post 'contact' => 'contact#create', :as => 'contact'
确保您的电子邮件模板正确
# app/views/notifications_mailer/new_message.text.erb
Name: <%= @message.name %>
Email: <%= @message.email %>
Subject: <%= @message.subject %>
Body: <%= @message.body %>
更新:2013年12月12日 我在GitHub上创建了一个Rails 3.2项目,以帮助任何人寻找在Rails中创建联系表单的现代解决方案。圣诞节快乐! https://github.com/scarver2/contact_form_app
答案 1 :(得分:0)
最终这就是我所做的......我意识到这不是一个真正的解决方案。但我还是没有别的。
notifications_mailer.rb
class NotificationsMailer < ActionMailer::Base
default :from => "example@gmail.com"
default :to => "example@gmail.com"
def new_message(message)
@message = message
mail(:subject => "[liquid.radio] #{message.subject}", :body => "
From: #{message.name}
Reply to: #{message.email}
Subject: #{message.subject}
Message: #{message.body}")
end
end
不是邮件应该如何工作......但至少它会发送完整的信息。
如果你处于紧张状态......就像我......这会让你在那里。一旦我停止以其他方式收到空白电子邮件,我会接受一个真正的答案(可能是scarver2)。