【发布时间】:2020-11-24 04:33:01
【问题描述】:
我想计算特定于用户 ID 的数组中元素的数量,然后显示该数字。 last_viewed 数组跟踪用户上次访问的事件。
schema.db 看起来像这样(它不是我认为解决问题所必需的整个架构。)
create_table "users", id: :serial, force: :cascade do |t|
t.integer "last_viewed", default: [], array: true
end
我试过了
<%= ((Users.last_viewed.where("id = ?", current_user.id)).count) %>
但似乎认为 last_viewed 是一种方法,而不是用户表的一部分。
我知道如何使用真正的 SQL,但是 Ruby on Rails 中的这些查询令人困惑。 本质上,我想将这段 SQL 代码转换为可在 Ruby 上运行的代码。
SELECT array_length(u.last_viewed, 1)
FROM users u
WHERE u.id = <user's id>;
【问题讨论】:
-
我认为正确的查询应该是
Users.where("id = ?", current_user.id)).last_viewed.count -
您是否考虑过使用 Arel 定义
array_length函数以便在模型中引用它?好处会有所不同,但对于一个非常大的数组,您不必将它检索到 Rails 来处理它。
标签: sql ruby-on-rails postgresql activerecord