gpt4 book ai didi

ruby-on-rails - 充当可读 Rails 插件问题

转载 作者:数据小太阳 更新时间:2023-10-29 06:49:45 24 4
gpt4 key购买 nike

我正在使用 Intridea 的 Acts as Readable我目前正在构建的消息系统的 Rails 插件。我已经相应地定义了我的消息类:

class Post < ActiveRecord::Base
acts-as-readable
end

一切似乎都按计划进行,但当我试图让应用程序在我的消息 View 中显示未读消息时,我遇到了问题。

他们的示例:(由于格式问题,我已将下划线更改为连字符)

bob = User.find_by_name("bob")

bob.readings # => []

Post.find_unread_by(bob) # => [<Post 1>,<Post 2>,<Post 3>...]
Post.find_read_by(bob) # => []

Post.find(1).read_by?(bob) # => false
Post.find(1).read_by!(bob) # => <Reading 1>
Post.find(1).read_by?(bob) # => true
Post.find(1).users_who_read # => [<User bob>]

Post.find_unread_by(bob) # => [<Post 2>,<Post 3>...]
Post.find_read_by(bob) # => [<Post 1>]

bob.readings # => [<Reading 1>]

因此,如果我想列出邮箱中未读邮件的数量(例如 Inbox (39) ),我应该可以这样做:

<%= Post.find_unread_by(current-user).count %>

但是没有用。一切就绪后,我似乎总是陷入简单的 View 问题。有什么想法吗?

最佳答案

以下将起作用

<%= Post.find_unread_by(current_user).size %>

<%= Post.find_unread_by(current_user).length %>

但是,如果您检查您的 development.log,您应该会看到它获得了未读计数

  1. 检索所有帖子
  2. 检索用户阅读的所有帖子
  3. 在 ruby​​ 中从 1. 中删除所有 2.

如果有很多帖子,这将是非常糟糕的性能。

更好的方法是检索当前用户阅读的帖子,然后使用 ActiveRecord::Calculations 获取计数而不检索数据库中的所有帖子

Post.count(:conditions => [ "id NOT IN (?)", Post.find_read_by(current_user)])

这应该进入您的 Post 模型以遵循在 View 或 Controller 中没有查找器的最佳实践

后.rb

def self.unread_post_count_for_user(user)
count(:conditions => [ "id NOT IN (?)", Post.find_read_by(user)])
end

那么你的观点就是

<%= Post.unread_post_count_for_user(current-user) %>

关于ruby-on-rails - 充当可读 Rails 插件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com