作为可读的 Rails 插件问题

Posted

技术标签:

【中文标题】作为可读的 Rails 插件问题【英文标题】:Acts-as-readable Rails plugin Issue 【发布时间】:2010-09-06 14:00:06 【问题描述】:

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

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

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

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

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 %>

但无济于事。一切就绪后,我似乎总是陷入简单的视图问题。 有什么想法吗?

【问题讨论】:

【参考方案1】:

以下将起作用

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

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

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

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

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

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

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

这应该进入您的 Post 模型,以遵循在视图或控制器中没有查找器的最佳实践

Post.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) %>

【讨论】:

以上是关于作为可读的 Rails 插件问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 juggernaut 作为 rails 插件时遇到问题

如何将数据从 webapp 传输到插件

来自python的javascript可读的json

从 RGB 生成可读的颜色?

C++ UnixTimestamp 和可读的时间格式

Terraform 在自动化中计划人类可读的输出