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

Rails 6中如何将变量作为ActiveRecord对象的列名调用

你可以通过Ruby原生的动态方法调用,或者ActiveRecord提供的属性读取方法实现需求,无需新增额外的模型方法:

方式1:使用public_send动态调用方法(适用范围更广,支持调用模型自定义方法)

Ruby支持通过方法名字符串/符号动态调用对象的公开方法,你可以直接用:

user.public_send(type)

相比直接用send,public_send只会调用对象的公开方法,避免意外调用到私有敏感方法,安全性更高。

方式2:使用ActiveRecord属性下标读取(仅适用于数据库字段)

如果type对应的都是模型的数据库字段,你可以直接用ActiveRecord实例的下标读取方法,实现和调用属性getter完全一致的效果:

user[type]

安全注意事项

如果type参数是用户可操控的输入,必须先加白名单校验,避免用户传入恶意方法名导致安全问题,简化后的完整方法示例:

def foo(type, user)
  # 白名单控制允许的type取值,后续新增取值只需要更新这个数组即可
  allowed_types = %w[foo bar]
  user.public_send(type) if allowed_types.include?(type)
end

内容的提问来源于stack exchange,提问作者Mateusz Adam Katana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:45:03