Ruby报错:Symbol无法隐式转为Integer,传递模型名至params求助
问题解决:no implicit conversion of Symbol into Integer 错误
错误原因
你的代码存在两个核心问题:
- 键类型不匹配:
obj.class.model_name.human返回的是给用户展示的友好名称(字符串类型,比如"Property"),但params的键是符号类型(比如:property),两者无法对应。 - 错误的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
相关产品推荐
相关产品推荐

