我的后端有以下查询:
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
非常感谢
答案 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>