当前位置:  开发笔记 > 编程语言 > 正文

Acts-as-readable Rails插件问题

如何解决《Acts-as-readableRails插件问题》经验,为你挑选了1个好方法。

我正在使用Intridea的Acts作为Readable Rails插件,用于我正在构建的消息传递系统.我已相应地定义了我的消息类:

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

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

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

bob = User.find_by_name("bob")

bob.readings                      # => []

Post.find_unread_by(bob)          # => [,,...]
Post.find_read_by(bob)            # => []

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

Post.find_unread_by(bob)          # => [,...]
Post.find_read_by(bob)            # => []

bob.readings                      # => []

所以,如果我想列出邮箱中的未读邮件数量(例如收件箱(39)),我应该能够做到这样的事情:

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

但无济于事.在设置好所有内容之后,我似乎总是陷入简单的视图问题.有任何想法吗?



1> russtbarnacl..:

以下将有效

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

要么

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

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

    检索所有帖子

    检索用户读取的所有帖子

    在红宝石中从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) %>

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有