我已经相应地定义了我的消息类:123class Post < ActiveRecord::Base
acts-as-readable
end一切似乎都按计划进行,"/>

关于ruby:作为可读的Rails插件发行

关于ruby:作为可读的Rails插件发行

Acts-as-readable Rails plugin Issue

我正在为当前正在构建的消息传递系统使用Intridea的"作为可读的Rails"插件。
我已经相应地定义了我的消息类:

1
2
3
class Post < ActiveRecord::Base
  acts-as-readable
end

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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)),我应该可以执行以下操作:

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

但无济于事。 一切就绪后,我似乎总是对简单视图问题感到困惑。
有任何想法吗?


以下将工作

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

要么

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

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

  • 检索所有帖子
  • 检索用户阅读的所有帖子
  • 从红宝石1.中移除所有2。
  • 有很多职位,这将是非常糟糕的表现。

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

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

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

    Post.rb

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

    那你的看法就是

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


    推荐阅读