ruby-on-rails - has_many 关系的每个最后一个元素的范围

标签 ruby-on-rails activerecord scope has-many

假设我在用户和消息之间有一个 has_many 关系。

我想设置一个范围,以便能够根据 中的内容过滤用户最后 他们发布的消息。所以只在每个用户的最后一条消息中搜索。

下面我得到了所有消息中的结果......

class Contact < ActiveRecord::Base
    has_many :messages

    scope :filter_by_last_messages, lambda { |value|
        joins(:messages).where("messages.content = ?", value)
    }
end

最佳答案

不可能在一个范围内一次性完成此操作,但您可以这样做:

scope :last_message, joins(:messages)
         .select("contacts.*, messages.content")
         .order("messages.created_at")

在您的 Controller 中:
if @contact.last_message.content == value
  do_something
end

所以可以稍微调整一下范围。

关于ruby-on-rails - has_many 关系的每个最后一个元素的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10193922/

相关文章:

ruby-on-rails - 回形针:删除附件和 "can' t 将 nil 转换为字符串”错误

mysql - 复制多个 MySql 行

ruby-on-rails - 用 Ruby 思考

ruby-on-rails - rails : any way to preload (include) parent association

java - 帮助我了解变量在 Java 中的工作原理

mysql - 在事务外释放 mysql 锁 (rails)

ruby-on-rails - 使用 apache 和 passenger 部署 Rails 应用程序后,显示页面不存在

grails - 依赖范围的确切含义是什么,例如构建、测试等

ruby-on-rails - NameError - 未定义的局部变量或方法 `favorites'

postgresql - 错误 : operator does not exist: timestamp without time zone > integer)