我正在使用rails 3.2和postgresql,并创建网站范围的公告。我有一个专栏,我已经列出了已经看过该公告的用户的所有ID。如何查找不包含用户ID的所有公告?
我正在寻找类似的东西:
class User
def announcements
Announcement.where(":hidden_users_ids DOES NOT INCLUDE ?", self.id)
end
end
hidden_users_ids是我已将数组序列化为的文本列。
我希望此方法返回hidden_users_ids数组中没有用户ID的所有公告。
谢谢!
答案 0 :(得分:0)
如果你想去阵列路线(你的意见建议),那么@>
and &&
operators会给你"确实包括"事情的一面:
运营商:
@>
说明:包含
示例:ARRAY[1,4,3] @> ARRAY[3,1]
结果:t
运营商:
&&
描述:重叠(共有元素)
示例:ARRAY[1,4,3] && ARRAY[2,1]
结果:t
如果RHS上的数组只有一个元素,则@>
和&&
将是等效的。
这意味着你可以做这样的事情:
Announcement.where("hidden_users_ids @> array[:id]", :id => self.id)
找到self
看到的公告。如果您想查找self
已经看到不的公告,那么只需否定逻辑:
Announcement.where("not hidden_users_ids @> array[:id]", :id => self.id)
# ------------------^^^