【发布时间】:2017-11-22 12:44:32
【问题描述】:
我正在尝试创建一组复选框标签,以便用户可以看到他有多少(已订阅),以及哪些没有。
我的模型是 User、Category 和 Preferences,它们通过两个第一个模型之间的关系处理 has_many:
class User < ApplicationRecord
has_many :preferences
has_many :categories, through: :preferences
end
class Category < ApplicationRecord
has_many :preferences
has_many :users, through: :preferences
end
class Preference < ApplicationRecord
belongs_to :user
belongs_to :category
end
我们的目标是让所有类别都存在,并能够以一种额外的方式检查用户是否拥有此类类别,这样我就可以使用有效的 CSS 规则并显示它们与用户没有的类别不同.
我尝试获取所有类别名称,以及与用户对应的所有类别名称,并将它们作为一个数组加入,其中包含多个 2 元素数组,我得到如下内容:
[
["coffee", "coffee"],
["coworking", "food"],
["event", "pub"],
["food", "restaurant"],
["landmark", "shop"],
["nightlife", "vacation"],
["pub", nil],
["restaurant", nil],
["shop", nil],
["transportation", nil],
["vacation", nil]
]
如果我能让它们在名称上匹配,这种方式会很好,因为每个数组的名称永远不会重复,可能像:
[
["coffee", "coffee"],
["coworking", nil],
["event", nil],
["food", "food"],
["landmark", nil],
["nightlife", nil],
["pub", "pub"],
["restaurant", "restaurant"],
["shop", "shop"],
["transportation", nil],
["vacation", "vacation"],
]
所以我可以在数组的最后一个(第二个)元素中查看其中哪些是 nil 并且不打印检查元素的 CSS 规则。
但似乎我需要在 ActiveRecord 查询之外进行。
是否存在通过使用 ActiveRecord 获得所需结果的任何方法,或者我必须手动处理它,或者更改架构?
【问题讨论】:
-
我不是 SQL 专家,但这听起来像是
left_outer_joinssql 查询,不是吗?
标签: ruby-on-rails ruby postgresql activerecord