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

如何在find_or_create_by中使用动态变量替换固定键名?

解决动态键替换my_model_id:的问题

你遇到的问题是Ruby哈希字面量的语法特性导致的——key: value这种写法会把key直接解析成符号:key,而不是执行key对应的方法并把返回值作为键。要实现动态键,有两种常用方式:

方法一:使用=>哈希语法

直接用=>把动态生成的键和值关联起来,Ruby会先执行左边的方法得到键,再传入find_or_create_by:

def my_model
  MyModel.find_or_create_by(attribute_name_for_relation => id)
end

方法二:展开哈希(Ruby 2.0+)

如果需要更明确地传递关键字参数,可以把动态哈希用**展开,这种方式在方法严格要求关键字参数时更稳妥:

def my_model
  MyModel.find_or_create_by(**{ attribute_name_for_relation => id })
end

验证一下你的attribute_name_for_relation方法,确保它返回正确的符号:比如当前类是User的话,它会返回:user_id,和你原来固定的my_model_id:逻辑一致,这样修改后的代码就能正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 13:12:06