[RUBY] [Rails] Fonction de notification

Environnement de développement

Synopsis

Créer un modèle de notification

Terminal


rails g model notification user:references task:references action:integer checked:boolean

db/migrate


class CreateNotifications < ActiveRecord::Migration[6.0]
  def change
    create_table :notifications do |t|
      t.references :task, null: false, foreign_key: true
      t.references :user, null: false, foreign_key: true
      t.integer :action
      t.boolean :checked, default: false, null: false

      t.timestamps
    end
  end
end

Terminal


rails db:migrate

Différents modèles

Modèle utilisateur

app/models/user.rb


class User < ApplicationRecord
  has_many :notifications, dependent: :destroy
end

Modèle de tâche

app/models/task.rb


class Task < ApplicationRecord
  belongs_to :user
  has_one :notification, dependent: :destroy
end

Modèle de notification

app/models/ntification.rb


class Notification < ApplicationRecord
  default_scope->{order(created_at: :desc)}

  belongs_to :task
  belongs_to :user

  enum action: { warning: 1, expired: 2}
end

Qu'est-ce que l'énumération

nom de la colonne enum: {Définition du nom:Valeur numérique}
Il s'agit d'un type d'énumération, et lors de l'enregistrement réel, enregistrez la définition du nom.

vue côté

python


rails g controller notifications index

config/routes.rb


Rails.application.routes.draw do
  resources :notifications,only: [:index]
end

app/controllers/notifications_controller.rb


class NotificationsController < ApplicationController
  def index
    @notifications = current_user.notifications
    @notifications.where(checked: false).each do |notification|
      notification.update(checked: true)
    end
  end
end

Notifier les notifications non lues et lues

ruby:app/views/layouts/_header.html.slim


- if unchecked_notifications.any?
  p.text-danger ★
= link_to "notification",notifications_path, class: 'nav-link'

app/helpers/notifications_heler.rb


module NotificationsHelper
  def unchecked_notifications
    @notifications = current_user.notifications.where(checked: false)
  end
end

app/controllers/application_controller.rb


class ApplicationController < ActionController::Base
  include NotificationsHelper
end

Créer une tâche de râteau à exécuter régulièrement

Qu'est-ce que Rake
Rake est une fonction qui vous permet de créer du code écrit en Ruby en tant que tâche et de l'appeler et de l'exécuter au besoin.

Voici quelques situations dans lesquelles vous pouvez utiliser la tâche de râteau.

Liaison de certains types de données
Sauvegarde de la base de données
Mettre à jour et supprimer des données régulièrement

Je n'ai pas travaillé sur «l'ajout d'un chemin à charger automatiquement», donc je l'écris directement dans le fichier rake.

python


rails g task notification
rails g nom de fichier de la tâche

lib/tasks/notification.rake


namespace :task do
  desc "notification/Bougez une fois par jour."
  task :notification => :environment do
    today = Date.today
    tasks = Task.all
    n = tasks.count
    today = Date.today
    tasks.each do |task|
      user = task.user
      if today + 1 == task.deadline.to_date
        Notification.create(task_id: task.id, user_id: user.id, action: "warning")
      end
      if task.notification.nil? && today > task.deadline.to_date
        Notification.create(task_id: task.id, user_id: user.id, action: "expired")
      elsif task.notification.present? && today > task.deadline.to_date
        task.notification.update(action: "expired")
      end
      n -= 1
      puts "restant#{n}/#{tasks.count}"
    end
  end
end

Courir

rake tasks:notification
rake [nom du nom]:[Nom de la tâche]

Vers l'environnement de production

Dans mon cas, c'est heroku, donc il semble utiliser heroku scheduler. Je vais le résumer à nouveau. gem: every est une gemme qui a été ajoutée / réécrite dans crontab.

[Ajout] Introduction du planificateur heroku

  1. Réglez l'heure et la tâche à exécuter sur Heroku Scheduler
heroku run rake task:notification

Recommended Posts

[Rails] Fonction de notification
Les rails suivent la fonction
[rails] fonction de classement des balises
Fonction de notification simple dans Rails (uniquement lorsqu'elle est suivie)
Implémenter la fonction d'application dans Rails
Implémentation de la fonction de recherche floue Rails
[Rails] Implémenter la fonction de recherche d'utilisateurs
Fonction de recherche à l'aide de [rails] ransack
[Rails] Implémentation de la fonction de catégorie
Rails ~ Comprendre la fonction de message ~
[Rails] Fonction de panier de site EC
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémenter la fonction de publication d'images
[Rails] Implémentation d'une fonction similaire
[Rails DM] Créons une fonction de notification lorsque DM est envoyé!
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation asynchrone de la fonction similaire
[Ruby on Rails] Introduction de la fonction de pagination
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] Fonction de gestion des balises (en utilisant des actes comme des balises)
[Rails] À propos de la mise en œuvre de la fonction similaire
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
Créer une fonction de pagination avec Rails Kaminari
Implémenter une fonction de connexion simple dans Rails
[Ruby on Rails] Fonction de sortie CSV
[Rails] Fonction de publication vocale ~ Cloudinary, CarrierWave
[Rails] Implémentation de la fonction de catégorie d'ascendance gemme
[Ruby on Rails] Implémentation de la fonction de commentaire
[Ruby on Rails] DM, fonction de chat
Implémenter la fonction de téléchargement CSV dans Rails
[Rails] Commentaire mémo de procédure d'implémentation
[Ruby on Rails] Fonction de recherche (non sélectionnée)
[Rails] Ajout de la fonction de commentaire Ruby On Rails
Notions de base sur les rails
Rails Examen 1
[Rails] Restrictions de fonction dans l'appareil (connexion / déconnexion)
API Rails
Migration des rails
[Rails] first_or_initialize
rails tutry
À propos des rails 6
Rails Ajout d'une fonction de connexion facile et facile
[Retrait des rails] Créez une fonction de retrait simple avec des rails
Fondation Rails
Mémorandum Rails