【问题标题】:Heroku 500 internal server error, TypeError (no implicit conversion of Symbol into Integer):Heroku 500 内部服务器错误,TypeError(没有将 Symbol 隐式转换为 Integer):
【发布时间】:2017-07-06 12:14:02
【问题描述】:

第一次发帖。 我试图让 mailgun 给我发一封电子邮件给新订阅者 但是当我填写表格时,它给了我 500 内部服务器错误和 TypeError。

错误日志

在 13 毫秒内完成了 500 个内部服务器错误(ActiveRecord:4.9 毫秒) TypeError(没有将 Symbol 隐式转换为 Integer):
app/controllers/contacts_controller.rb:9:in []' app/controllers/contacts_controller.rb:9:increate'

我的 ContactsController 有问题吗?

class ContactsController < ApplicationController
 def new
@contact = Contact.new
end

def create
 @contact = Contact.new(contact_params)
 if @contact.save
  name = params[:contact][:name]
  email = params[:contact][:email]
  body = params[:contact][:comments]
  ContactMailer.contact_email(name, email, body).deliver
   flash[:success] = "Message sent."
   redirect_to new_contact_path
 else
   flash[:danger] = @contact.errors.full_messages.join(", ")
   redirect_to new_contact_path
 end
end  

 private
    def contact_params
     params.require(:contact).permit(:name, :email, :comments)
    end  
end

contact_email.html.erb

   <!DOCTYPE html>
   <html>
     <head></head>
     <body>
       <p>You have received a message from the site's contact form, from
       <%= "#{ @name }, #{ @email }." %></p>
       <p><%= @body %></p>
     </body>

   </html>

奇怪的是,如果我通过 cloud9 服务器在开发中运行我的代码,它运行良好,但在通过 heroku 服务器的生产中,它在尝试提交完全填写的联系我们表格后给我一个错误。 我也通过关注website 来学习如何编码。 问题在于第 78 课。

【问题讨论】:

  • 检查params。看起来 params[:contact] 返回 Array 而不是“哈希”
  • params[:contact] 是字符串或数组,它不是哈希。因此,当您执行 params[:contact][:name] 时,它并没有期待 :name 它期待一个整数。
  • 能否请您发表您的观点,这将有助于确定您在构建params时可能存在的问题

标签: ruby-on-rails heroku mailgun cloud9


【解决方案1】:

姓名、电子邮件、正文 - 必须是字符串。

inspect it by 
name.class
email.class
body.class

ActionMailer 只能使用基本类型(如字符串),但在你的代码中,name、email、body 中的某人是一个符号类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2019-01-19
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多