Rails在序列化数组中查找没有ID的对象

时间:2014-03-15 21:10:15

标签: ruby-on-rails postgresql activerecord rails-activerecord

我正在使用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的所有公告。

谢谢!

1 个答案:

答案 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)
# ------------------^^^