首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Acts-as-readable Rails插件问题

Acts-as-readable Rails插件问题
EN

Stack Overflow用户
提问于 2008-08-22 17:37:51
回答 1查看 607关注 0票数 9

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

代码语言:javascript
复制
class Post < ActiveRecord::Base
  acts-as-readable
end

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

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

代码语言:javascript
复制
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>]

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

代码语言:javascript
复制
<%= Post.find_unread_by(current-user).count %>

但无济于事。在一切就绪之后,我似乎总是被简单的视图问题卡住了。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2008-08-22 18:33:34

下面的方法将会起作用

代码语言:javascript
复制
<%= Post.find_unread_by(current_user).size %>

代码语言:javascript
复制
<%= Post.find_unread_by(current_user).length %>

但是,如果您检查您的development.log,您应该看到它通过以下方式获得未读计数

  1. 正在检索所有的帖子用户
  2. 读取的所有帖子删除所有2. from 1. in ruby

这将是非常糟糕的性能智慧与大量的帖子。

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

代码语言:javascript
复制
Post.count(:conditions => [ "id NOT IN (?)", Post.find_read_by(current_user)])

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

Post.rb

代码语言:javascript
复制
def self.unread_post_count_for_user(user)
  count(:conditions => [ "id NOT IN (?)", Post.find_read_by(user)])
end

那么你的观点就只会是

代码语言:javascript
复制
<%= Post.unread_post_count_for_user(current-user) %>
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档