首页 > 解决方案 > 传递“参数”时出现类型错误(没有将符号隐式转换为整数)

问题描述

首先 - 提前道歉。我意识到关于这个问题还有其他帖子,但我对开发非常陌生,需要更彻底的理解和解释。

问题是我在作为查询的一部分TypeError (no implicit conversion of Symbol into Integer)发送时遇到错误。params.where

我有一个 Twilio 集成,当我收到来自电话号码的文本时,我想在我的数据库的表中查找该电话号码Users以查看它们是否存在,然后执行一些操作。

以下是我在控制台中看到的参数,这些参数是从 Twilio 的 POST 调用中获得的(我删除了敏感或不相关的参数):

Parameters: {"SmsStatus"=>"received", "Body"=>"Blah blah blah", "From"=>"+15555555555"}

这是受到打击的控制器方法:

    def incoming_text
        user = User.where(phone: params[:From])
        if user.present?
            url = URI.extract(params[:Body])
            if url.present?                             ### Row #26
        end
    end

根据我读过的其他线程,我认为问题在于我如何传递params[:From],但我只是不知道我应该如何传递它的数据结构或符号是什么。任何我应该阅读的文档将不胜感激。

编辑:这是我的users表的架构:

  create_table "users", force: :cascade do |t|
    t.string "phone"
    t.boolean "confirmed"
  end

EDIT2:真正的问题似乎与此无关。我还在调查,但我不想浪费任何人的时间。

EDIT3:这里是日志:

User Load (0.1ms)  SELECT "users".* FROM "users" WHERE "users"."phone" = ?  [["phone", "+15555555555"]]
#<User:0x00007efcedb05400>
Completed 500 Internal Server Error in 8ms (ActiveRecord: 0.8ms)

TypeError (no implicit conversion of Symbol into Integer):

app/controllers/users_controller.rb:26:in `incoming_text'

标签: ruby-on-railshashparametersruby-on-rails-5

解决方案


看起来您的数据库列phone属于类型Integer,您是否尝试过转换params[:From]为整数?

更新后,它看起来像:

    def incoming_text
        user = User.where(phone: params[:From].to_i)
        if user.present?
            ...
        end
    end

.to_也会自动去掉“+”号


推荐阅读