【问题标题】:How to use AREL eq() method in a where with joined data如何在连接数据的地方使用 AREL eq() 方法
【发布时间】:2013-04-02 17:40:42
【问题描述】:

我目前有这个范围:

class User

  has_many :inbox_messages, :through => :message_users do
    def unread
      published.where(:message_users => { :sender => false, :trash => false , :deleted => false}).where(MessageUser.arel_table[:read_at].not_eq(nil))
    end

  end
end

而且它正在工作。但我想知道是否有办法将第二个 where 合并到第一个中。

【问题讨论】:

  • 是同一个表的where子句(即MessageUser使用的表)?
  • 检查修改后的代码。

标签: ruby-on-rails activerecord arel


【解决方案1】:

如果我正确理解您的代码,您应该可以使用

published.where(:message_users => { :sender => false, :trash => false , :deleted => false, :read_at => nil })

【讨论】:

  • 那么你确实需要它作为一个单独的where 语句使用类似.arel_table[:read_at].not_eq(nil) 的东西,因为你不能将它混合到你在:message_users 选项中传递的现有哈希中。
  • 还有一个开源的Squeel 库,它通过自定义DSL 使这些类型的表达式更加自然(例如,您可以使用!= nil)。有关详细信息,请参阅其文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 2015-03-31
相关资源
最近更新 更多