Ruby on rails 使用哈希访问目标对象

Ruby on rails 使用哈希访问目标对象,ruby-on-rails,ruby,hash,Ruby On Rails,Ruby,Hash,我有一个如下的散列。我需要知道是否可以访问display\u name对象,以便它返回活动记录值 { "actor"=> { "id"=>1, "class"=>"User", "display_name"=>"#<User:0x007ffc8c498b18>" } } {“演员”=> {“id”=>1,“class”=>“User”,“display_name”=>“#”} } 我想我可以,因为他们一开始就不会添加它。我知道我可以使用id键和类键

我有一个如下的散列。我需要知道是否可以访问
display\u name
对象,以便它返回活动记录值

{ "actor"=> 
  { "id"=>1, "class"=>"User", "display_name"=>"#<User:0x007ffc8c498b18>" } 
}
{“演员”=>
{“id”=>1,“class”=>“User”,“display_name”=>“#”}
}

我想我可以,因为他们一开始就不会添加它。我知道我可以使用id键和类键,但必须有理由使用目标对象。如果这是不可能的,你认为他们为什么要添加它,我可以用它做什么?

不幸的是,你不能用现有的散列来做这件事。与“display_name”键关联的值是一个字符串。这意味着您将无法访问所有用户方法和属性。如果让我猜的话,我会说编写生成哈希的代码的人可能认为User类上有一个返回显示名的
to\s
方法

我会尝试以下方法之一:

  • to_s
    方法添加到
    User
    ,该方法将返回您需要的名称。这可能会在散列中存储适当的数据
  • 使用“id”键查找所需的用户,然后调用所需的属性
  • 修改创建哈希的代码,以便存储实际的
    User
    实例,而不是它的字符串表示形式
  • 修改创建散列的代码,并存储用户的适当属性,而不是其字符串表示形式

  • 听起来你想做上面的选项3。如果您这样做,我建议将“display\u name”键重命名为“user”,以便更清楚地显示您存储的内容。

    “我假设我可以”不,您绝对不能。没用。我们不可能猜到“他们”为什么加上它,我们只能假设他们加错了。你觉得这像是“显示名称”吗?如果这是你的实际结构,那么看起来某个地方有一个bug,因为这看起来像是Object#inspect的结果,而不是对象本身被设置为哈希中的值。@meagar哇……我不知道这是否是我阅读你消息的方式,但请不要粗鲁。我问这个问题是因为我不知道,这就是为什么我来找你@Chuck谢谢,我会查看一下代码,看看这里是否使用了
    对象#Inspect
    。可能是类应该提供的实际“显示名称”的回退值(
    User#to#s
    )。这就是代码所做的
    显示名称:target.to(u
    )@Stefan我认为你的回退可能是对的。在找到这篇文章后,我最终选择了选项1,这有助于解释发生了什么:。不过,我会接受你的回答,因为你已经解释了许多不同的解决方案。