如何在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
相关产品推荐
相关产品推荐

