• Как предотвратить крэш памяти при автообновлении в vue?

    @Kostik_1993
    Web Developer
    Копайте в сторону вебсокетов
    Если всё-таки хотите делать запросами тогда шлите запрос на то что данные обновлены, для этого заведите простой путь и отвечайте да/нет, или посылайтесь при запросе временную метку последнего запроса и получайте только новые позиции, увеличьте время между запросами, три секунды это дико часто.
    Также в вашей data не вижу orders. Это может вызвать дополнительные ошибки
    Также все зависит от объемов информации которую вы получаете, может быть у вас банально кончилась память на устройстве
    Ответ написан
    3 комментария
  • Как сделать систему уведомления для пользователей?

    FanKiLL
    @FanKiLL
    Есть такой gem - https://github.com/pokonski/public_activity
    У railscasts есть скринкаст как сделать это с нуля - railscasts.com/episodes/407-activity-feed-from-scratch но там показываются нотификации для всего и всех.

    Я же сделал так:
    миграция
    class CreateActivities < ActiveRecord::Migration
      def change
        create_table :activities do |t|
    
          t.integer :user_id # кому нотификация
          t.integer :author_id # кто сделал действие
          t.string :action # какое действие например create значит что то создалось
          t.integer :trackable_id #полиморфизм
          t.string :trackable_type #полиморфизм
          t.boolean :read, default: false
          t.timestamps
        end
    
        add_index :activities, [:trackable_id, :trackable_type]
        add_index :activities, :user_id
        add_index :activities, :author_id
        add_index :activities, :read
      end
    end


    потом в applicationController.rb есть такой метод
    def create_activity(to, author, action, trackable)
        activity = to.activities.build
        activity.author = author
        activity.action = action
        activity.trackable = trackable #полиморфизм обьект над которым произвелось действие
        activity.save
      end


    и потом в любом контролере
    например юзер отсылает сообщение другому юзеру или кто то оставляет комментарий вообщем любое действие
    create_activity(@user, current_user, 'create', @post)


    в итоге у вас потом такая лента примерно toster.ru/my/tracker как у тостера
    если взять все уведомления у юзера
    @activities = current_user.activities.includes(:author, :trackable).order(created_at: :desc)


    в view у вас всё есть, кому нотификация, действие которое было сделанно и обьект на который вы можете дать ссылку
    например вот так, но это частный случай у вас конечно будет подругому
    <%= link_to activity.author.username, user_path(activity.author) %> ответил на сообщение <%= link_to activity.trackable.conversation.title, my_conversation_path(activity.trackable.conversation) %>


    Будет написанно например
    FanKiLL ответил на сообщение название сообщения
    или
    FanKiLL написал новый пост

    Вообщем предлогаю посмотреть gem и скринкаст что я дал вначале - а там и этот код будет более понятен - если что спрашивайте.

    когда юзер заходит на страницу с нотификациями все не прочитанные сообщения помечаются как прочитанные а до этого можете где хотите выводить список не прочитанных сообщений

    current_user.activities.where(read: false).count
    Ответ написан
    3 комментария