You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby报错:Symbol无法隐式转为Integer,传递模型名至params求助

问题解决:no implicit conversion of Symbol into Integer 错误

错误原因

你的代码存在两个核心问题:

  1. 键类型不匹配:obj.class.model_name.human返回的是给用户展示的友好名称(字符串类型,比如"Property"),但params的键是符号类型(比如:property),两者无法对应。
  2. 错误的params赋值:你给params[:required_model]赋值了字符串,后续访问params[:required_model][:model_values_attributes]时,实际是在对字符串用符号做索引,而字符串仅支持整数索引,因此触发「Symbol转Integer」的转换错误。

修正方案

直接获取模型对应的参数符号键,无需给params额外赋值:

def method(obj)
  # 获取模型对应的参数键(自动转为符号,比如 :property)
  required_model_key = obj.class.model_name.param_key.to_sym
  
  # 用动态符号访问params中的目标键
  model_values_attributes = params[required_model_key][:model_values_attributes]
  model_values_attributes.each do |key, value|
    if value[:value].blank?
      # 修正原代码笔误:删除当前key对应的属性
      model_values_attributes.delete(key)
    else
      value[:company_id] = current_company.id
    end
  end
end

关键说明

  • obj.class.model_name.param_key:Rails内置方法,返回适合作为参数键的字符串(比如模型类Property会返回"property"),转成符号后正好匹配params中的键。
  • 移除params[:required_model] = required_model:这一步完全多余,反而会干扰params的结构,导致后续索引错误。
  • 原代码中的field_values_attributes.delete(key)是笔误,需改为model_values_attributes.delete(key),否则会触发未定义变量错误。

内容的提问来源于stack exchange,提问作者Zunaira Ihsan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 09:54:22