使用ActiveRecord分组时无法选择查询

时间:2018-10-28 10:37:14

标签: ruby-on-rails activerecord

我的后端有以下查询:

Sending invitation to 10.0.0.245 
Authenticating...OK
12:12:49 [ERROR]: No response from device [after a short while]

数据库中的表如下:

Start updating sketch
Progress: 0% [never proceeds beyond 0%]
Error[2]: Connect Failed [after a short while]
Error[4]: End Failed

我得到的结果如下:

@books = Book.select("city, sum(rating)").group("city")

我正在使用sqlite,只是为了练习AR。

在sqlite中,我将使用的命令显示了我期望的结果:

  create_table "books", force: :cascade do |t|
    t.string "title"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "author_id"
    t.integer "rating"
    t.string "city"
    t.index ["author_id"], name: "index_books_on_author_id"
  end
  • 为什么我看不到ActiveRecord的评分总和?
  • 如果我没有选择ID,为​​什么会看到它们?

非常感谢

1 个答案:

答案 0 :(得分:1)

您看到的是ID,因为inspect在ActiveRecord中并不完美。

您没有看到评分总和,因为inspect在ActiveRecord中并不完美。

如果将AS添加到select

@books = Book.select("city, sum(rating) AS rating_sum").group("city")
# => #<ActiveRecord::Relation [#<Book id: nil, city: "barcelona">, #<Book id: nil, city: "madrid">]>
@books.first.rating_sum
# => 11

您将能够在每个返回的元素上调用.rating_sum,但在检查元素时仍不会在控制台中看到总和。

在这种情况下,您还可以通过对结果调用AS来访问总和而不使用.sum

@books.first.sum

但是一旦查询变得更加复杂,您将需要在查询中使用AS来明确指定属性名称。

您可能已经注意到,看到的id为null,这是因为ActiveRecord的inspect始终显示模型的id,并且由于查询未返回它,因此未分配任何内容。 / p>