在Rails控制台中,如何显示所有sql选择的属性?

时间:2017-12-30 18:07:50

标签: ruby-on-rails ruby-on-rails-4

多年来,这对我来说一直是一个令人困惑的问题,我从来没有问过这个问题。为什么我在以下控制台输出中看不到name,即使我明确选择了它?

enter image description here

如果我将该输出分配给变量并说relation.first.name我将看到该名称,但我无法在控制台中显示该名称。另外,如果我将ActiveRecord关系转换为数组,我会看到类似的问题:

2.3.5 :070 > a.first
#<ActsAsTaggableOn::Tagging:0x00007ff9f3779aa8> {
    :id => 139
}
2.3.5 :071 > a.first.name
"phones"

有没有更好的方法来解决这个问题?目前,我所能想到的只是将其映射以使其可见,这使得编写查询变得很痛苦:

a.map{|tag| [tag.id, tag.name]}

3 个答案:

答案 0 :(得分:1)

  

a.first.attributes

您还可以使用.attributes['column_name']提取所需信息,而无需依赖点语法,这可能会产生意外结果。

答案 1 :(得分:0)

由于您使用ActsAsTaggableOn::Tagging进行查询,因此控制台仅在ActsAsTaggableOn::Tagging上显示其知道的属性。我猜测该模型没有name属性,所以它不知道如何显示它。

我相信查询的结果也有点令人困惑。查询显示ActsAsTaggableOn::Tagging,但我认为它显示了代码的ID。

由于您正在尝试查询代码,如果可以选择,我可能会切换您的查询。我对你想要达到的目标有点不清楚,所以我做了一个假设。例如,这是我要尝试的内容:

Tag.joins(:taggings).where(:"taggings.context" => "topics")

通过这种方式加入,您仍然可以访问您正在寻找的所有标记;但是,您可以根据需要显示所有标记属性。

答案 2 :(得分:0)

使用.pluck()代替.select()。然后,您没有中间对象,他们不了解name列。