【问题标题】:TypeError (no implicit conversion of Symbol into Integer) when passing 'params'传递“参数”时出现类型错误(没有将符号隐式转换为整数)
【发布时间】:2020-01-02 07:56:03
【问题描述】:

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

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

我有一个 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],但我只是不知道数据结构或符号是什么我应该 /em> 通过它。我应该阅读的任何文档将不胜感激。

编辑:这是我的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'

【问题讨论】:

  • 这是整个params 对象吗?看起来是数组而不是哈希,params.keys 返回什么?
  • @SebastianPalma 这里是键: ToCountry ToState SmsMessageSid NumMedia ToCity FromZip SmsSid FromState SmsStatus FromCity Body FromCountry ToZip NumSegments MessageSid AccountSid From ApiVersion 控制器操作
  • 可以在请求的时候添加日志吗?
  • @SebastianPalma 已更新。另请阅读我在您之前发布的第二次编辑。我想我在看(a)错误的问题(有一个 500 错误,但我不知道为什么),并且(b)TypeError 似乎发生在我以前没有包括的另一行上。我现在已经包含了它。

标签: ruby-on-rails hash parameters ruby-on-rails-5


【解决方案1】:

您的数据库列 phone 的类型似乎是 Integer,您是否尝试将 params[:From] 转换为整数?

更新后的样子:

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

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

【讨论】:

  • 我已经用我的架构编辑了我的原始帖子。它显示phonestring
  • 不知何故你得到了一个嵌套数组(请参阅日志第一行中数组周围的双方括号)。如果您希望它在不弄清楚参数为何以它们的形式出现的情况下工作,您可以这样做:params[:From][0][1]
猜你喜欢
  • 2014-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多