gpt4 book ai didi

Ruby:如何干掉相似的模型属性调用

转载 作者:数据小太阳 更新时间:2023-10-29 08:25:29 26 4
gpt4 key购买 nike

我有一个 User 模型,其中包含许多非常相似的属性,我想列出这些属性而无需逐个输入。

所以,而不是:

"eye color: #{@user.his_eye_color}"
"hair color: #{@user.his_hair_color}"
"height: #{@user.his_height}"
"weight: #{@user.his_weight}"
...

"eye color: #{@user.her_eye_color}"
"hair color: #{@user.her_hair_color}"
"height: #{@user.her_height}"
"weight: #{@user.her_weight}"
...

我想做一个 block 或其他东西(Proc?Lambda?仍然有点不清楚那些是什么......):

['eye color','hair color','height','weight',...].do |stat|
"#{stat}: #{@user.her_(stat.underscore)}"
end

['eye color','hair color','height','weight',...].do |stat|
"#{stat}: #{@user.his_(stat.underscore)}"
end

我知道我刚刚在上面写的东西是神秘的、神奇的,而且是完全错误的(@user.his_(stat.underscore) 部分),但我能做些什么呢,就像这样?我基本上需要动态调用模型的属性,但我不确定该怎么做...

非常感谢任何帮助!

最佳答案

['eye color','hair color','height','weight',...].do |stat|
"#{stat}: #{ @user.send(:"her_#{stat.tr(" ","_")}") }"
end

['eye color','hair color','height','weight',...].do |stat|
"#{stat}: #{ @user.send(:"his_#{stat.tr(" ","_")}") }"
end

这应该有效。您始终可以使用 send 调用对象上的方法,并动态生成该方法名称作为字符串

关于Ruby:如何干掉相似的模型属性调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2245745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com