我无法弄清楚这个问题,即使看起来并不复杂......
我想制作一个表单来在我的rails应用程序中发送电子邮件,但这个不起作用。我收到以下错误:
TypeError in MessagesController#create
:
#<Message content: "test", email: "test@test.fr", name: "test"> is not a symbol
错误发生在:app/controllers/messages_controller.rb:10:in 'create'
1.我的messages_controller
:
class MessagesController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new(params[:message])
if @message.valid?
Messenger.send(@message).deliver
redirect_to root_url, notice: "Message sent! Thank you for contacting us."
else
render "new"
end
end
end
表单new.html.erb
:
<%= form_for @message do |f| %>
<%= f.text_field :name %>
<%= f.text_field :email %>
<%= f.text_area :content, :rows => 5 %>
<%= f.submit "Send Message" %>
<% end %>
使用Message
构建的ActiveAttr
模型:
class Message
include ActiveAttr::Model
attribute :name
attribute :email
attribute :content
end
我的Messenger
邮件:
class Messenger < ActionMailer::Base
default :from => "test@test.com"
def send(message)
mail(:to => "test@test.com", :subject => "test")
end
end
感谢您的帮助!
答案 0 :(得分:7)
用不同的方法名替换send
,因为它与ruby中定义的方法冲突。
答案 1 :(得分:0)
我使用send方法有类似的TypeError,因为它期待一个符号,我传入了其他东西。我通过做
之类的东西来修复它send(some_variable) if some_variable == Symbol
然而,看起来您正在尝试发送邮件,而您正在使用旧方法来执行此操作。 Rails 4.1.8在这里有一种新方法:http://api.rubyonrails.org/classes/ActionMailer/Base.html