传递对象时Rails TypeError

时间:2013-07-18 21:22:16

标签: ruby-on-rails model typeerror symbols

我在Rails 4中创建了一个无表格模型,以支持轻松发送电子邮件。

所以我有以下模型:

class Message
  include ActiveModel::Model

  attr_accessor :subject, :content, :email
end

以下控制器:

class MessagesController < ApplicationController
  def new
    @message = Message.new
  end

 def create
   message = Message.new(params[:message])
   if message.valid?
     UserMailer.send(message)
     redirect_to :back, :notice => "Email was successfully sent."
   else
     flash[:alert] = "You must fill all fields."
     render 'new'
   end
 end
end

表格:

<%= form_for @message do |f| %>
  <%= f.label :email %>
  <%= f.text_field :email %>

  <%= f.label :subject %>
  <%= f.text_field :subject %>

  <%= f.label :content %>
  <%= f.text_area :content, rows: 5, class: 'span7' %>
  <%= f.submit "Send Email", class: 'btn btn-primary' %>

<% end %>

但是当我尝试在这里发送电子邮件时,我得到的是:

#<Message:0x007fcc98e8c760 @errors=#    <ActiveModel::Errors:0x007fcc98e96788 @base=#<Message:0x007fcc98e8c760 ...>, @messages={}>,     @email="sdsadas@adasdas.com", @subject="adasdas", @content="asdsad", @validation_context=nil> is not a symbol

错误说明在这里UserMailer.send(消息)

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

您在UserMailer上调用的Kernel.send方法只接受符号或字符串,而您尝试向其传递Message的实例。您可能正在寻找UserMailer的其他方法。通常,您将在ActionMailer::Base子类上定义和调用自己的方法。有关详细信息,请参阅the guide