【问题标题】:Equivilent to where() on a Associations::CollectionProxy等效于 Associations::CollectionProxy 上的 where()
【发布时间】:2013-09-03 16:37:16
【问题描述】:

您将如何在关联中设置 where 条件?因为它返回一个 CollectionProxy,几乎没有任何关于它的信息,即使在 DOCS 中也是如此。我不知道该怎么做,为什么这样的东西不起作用?

@new_notifications = self.notifications.where({:seen => false})

想通了! 出于某种原因,将哈希传递到 where 语句是问题所在。 这有效:

@notifs = self.notifications.where(seen = false)

【问题讨论】:

  • Notification 的每个实例都默认设置为 false,上面的语句也没有语法错误。它只是没有得到任何记录,它返回一个空的关系。这个 SQL 有什么奇怪的地方吗? SELECT "notifications".* FROM "notifications" WHERE "notifications"."bit_id" = ? AND "notifications"."seen" = 'f' [["bit_ id", 4]]
  • Notification.where(:seen => false) 会返回您期望的结果吗?与任何集合代理问题相比,测试布尔值听起来更像是一个问题。
  • where(seen = false) 不起作用。它只会返回所有通知。您是否正确编辑了您的问题?

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

CollectProxyRelation 的子类,这意味着您可以完全按照您的预期行事。

所以,类似:

self.notifications.where(:seen => false)

只要您在任何 self 上都有一个 has_many :notifications 关联,就可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2014-04-26
    相关资源
    最近更新 更多