Сведения о вопросе

Oleksandr

11:50, 17th August, 2020

Теги

ruby-on-rails   ruby   plugins    

Acts-as-readable Rails проблема плагина

Просмотров: 495   Ответов: 1

Я использую Intridea в качестве читаемого плагина 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 %>

Но безрезультатно. Я всегда, кажется, застреваю на простых проблемах просмотра после того, как все установлено. Есть идеи?



  Сведения об ответе

SEEYOU

13:13, 10th August, 2020

Следующее будет работать

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

или

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

Однако, если вы проверите свой development.log, вы должны увидеть, что он получает непрочитанное количество

  1. Получение всех сообщений
  2. Получение всех сообщений, прочитанных пользователем
  3. Удаление всех 2. от 1. в ruby

Это будет очень плохая производительность мудрый с большим количеством сообщений.

Лучшим способом было бы получить сообщения, прочитанные текущим пользователем, а затем использовать 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) %>

Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться