【问题标题】:How to display query result in a Hash in view Ruby On rails如何在 Ruby On rails 视图中以哈希形式显示查询结果
【发布时间】:2018-02-17 13:13:00
【问题描述】:

我的控制器有以下查询:

# reports_between_two_dates is already defined
@data_count_by_city = reports_between_two_dates
                        .joins('JOIN "places" ON "places"."id"="reported_regs"."reported_place_id" JOIN "cities" ON "places"."city_id" = "cities"."id" ')
                        .where('"reported_regs"."reported_place_id" IN (SELECT "places"."id" FROM "places") AND "places"."city_id" IN (SELECT "cities"."id" FROM "cities")')
                        .group('"display_name"')
                        .select('COUNT(*) AS count, "display_name" AS cities')
                        .order('count DESC')
                        .limit(3)

我在控制器中也有这个:

respond_to do |format|
  format.js { 
    render json: { 
    html: render_to_string(
      partial: 'data_stats', 
      locals: { 
        data_count_by_city: @data_count_by_city
    }) } }
  format.html
end

psql 中的查询结果如下:

 count |    cities     
-------+---------------
   409 | NYC
   244 | SF
   156 | LA

我的最终目标是将上述结果显示为哈希,将城市作为键,将计数作为值..

在我尝试过的视图中:

<td><%= Hash[@data_count_by_city.map{ |r| [r.cities,r.count] }] %></td>

但我得到的只是一个空哈希.. 我错过了什么?

【问题讨论】:

  • Ruby 中的查询结果是什么:@data_count_by_city.inspect?
  • 那么,你想在erb中渲染一个哈希?
  • @Leito 结果是:#<:relation>
  • 没有结果,这就是你得到一个空哈希的原因。所以让我们回到查询,忘记控制器和视图。 SQL中的查询是什么?您在 Rails 服务器的日志中看到的查询是什么?
  • 如果您的关联定义正确,则不需要自定义连接字符串。可以包含模型吗?

标签: ruby-on-rails ruby activerecord hash


【解决方案1】:

关系似乎没有返回任何结果(空关系:#&lt;ActiveRecord::Relation []&gt;)。 OP 发现他在生产环境中运行查询,而在不同环境中运行代码。

除此之外,只要@data_count_by_city 存储一个包含citiescount 的类数组结构,代码似乎就可以正常工作。关于这一点,我认为

.group('display_name').count 不需要.select('COUNT(*) AS count, "display_name" AS cities')

【讨论】:

  • 非常感谢 Leito 的提醒 :) 顺便说一句,如果我选择某些日期,我会得到一个空的哈希值,我认为这是因为内部联接,我尝试进行外部联接,但仍然没有结果.有什么想法吗?
  • 可能,但同样的建议是:将服务器日志中的查询与psql 中的查询进行比较。然后慢慢解构查询,看看是什么导致它为空。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-30
  • 2016-02-01
  • 2014-09-08
  • 2014-04-09
  • 2021-12-09
  • 2018-12-12
  • 2021-07-12
相关资源
最近更新 更多