gpt4 book ai didi

ruby-on-rails - 是否可以动态调用属性?

转载 作者:太空宇宙 更新时间:2023-11-03 17:20:11 26 4
gpt4 key购买 nike

假设我有一个模型 Person,它具有任意数量的属性,包括 name。是否可以通过用变量指定来动态选择要调用的属性?像这样:

person.name = "Jake"
attr = "name"
puts person.attr
=> "Jake"

我可以用这样的条件语句来做到这一点:

if attr == "name"
puts person.name
elsif attr == "height"
puts person.height
...

但这看起来效率很低。

最佳答案

如果您使用的是 ActiveRecord,则可以使用 [] 获取属性。

person = Person.last
attr = "height"
puts person[attr]

但这只适用于 Person.columns_hash 中的属性,不适用于关联之类的东西。

为此,您需要使用 public_send,例如,

person = Person.last
attr = 'height'
puts person.public_send(attr.to_sym)

如果您要允许用户选择这是什么属性,您需要将其列入白名单,这样就不会有人 attr = params[:attribute] 并调用 ? attribute=destroy 并销毁一条记录。除非你想让他们……:)

关于ruby-on-rails - 是否可以动态调用属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51235051/

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