[RUBY] [Rails] Benachrichtigungsfunktion

Entwicklungsumgebung

Zusammenfassung

Erstellen Sie ein Benachrichtigungsmodell

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

Verschiedene Modelle

Benutzermodell

app/models/user.rb


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

Aufgabenmodell

app/models/task.rb


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

Benachrichtigungsmodell

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

Was ist Enum

Name der Aufzählungsspalte: {Namensdefinition:Numerischer Wert}
Es handelt sich um einen Aufzählungstyp. Speichern Sie bei der Registrierung die Namensdefinition.

Ansichtsseite

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

Benachrichtigen Sie ungelesene und gelesene Benachrichtigungen

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


- if unchecked_notifications.any?
  p.text-danger ★
= link_to "Benachrichtigung",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

Erstellen Sie eine Rechenaufgabe, die regelmäßig ausgeführt werden soll

Was ist Rake?
Rake ist eine Funktion, mit der Sie in Ruby geschriebenen Code als Aufgabe erstellen und bei Bedarf aufrufen und ausführen können.

Hier sind einige Situationen, in denen Sie die Rechenaufgabe verwenden können.

Verknüpfung von Daten
Datenbanksicherung
Aktualisieren und löschen Sie die Daten regelmäßig

Ich habe nicht daran gearbeitet, einen automatisch zu ladenden Pfad hinzuzufügen, also schreibe ich ihn direkt in die Rake-Datei.

python


rails g task notification
Schienen g Name der Aufgabendatei

lib/tasks/notification.rake


namespace :task do
  desc "notification/Bewegen Sie sich einmal am Tag."
  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 "verbleibend#{n}/#{tasks.count}"
    end
  end
end

Lauf

rake tasks:notification
rake [Name des Namensstücks]:[Aufgabennname]

Auf dem Weg zur Produktionsumgebung

In meinem Fall ist es Heroku, also scheint es "Heroku Scheduler" zu verwenden. Ich werde es noch einmal zusammenfassen. gem: when ist ein Edelstein, der zu crontab hinzugefügt / umgeschrieben wurde.

[Ergänzung] Heroku-Scheduler eingeführt

  1. Stellen Sie die Zeit und die Aufgabe ein, die Sie auf Heroku Scheduler ausführen möchten
heroku run rake task:notification

Recommended Posts

[Rails] Benachrichtigungsfunktion
Schienen folgen der Funktion
[Rails] Tag-Ranking-Funktion
Einfache Benachrichtigungsfunktion in Rails (nur wenn befolgt)
Implementieren Sie die Anwendungsfunktion in Rails
Implementierung der Fuzzy-Suchfunktion für Schienen
[Schienen] Implementieren Sie die Benutzersuchfunktion
Suchfunktion mit [Rails] Ransack
[Rails] Implementierung der Kategoriefunktion
Schienen ~ Die Nachrichtenfunktion verstehen ~
[Rails] EC-Site-Cart-Funktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementieren Sie die Image-Posting-Funktion
[Rails] Implementierung einer ähnlichen Funktion
[Rails DM] Erstellen wir eine Benachrichtigungsfunktion, wenn DM gesendet wird!
[Rails] Implementierung der CSV-Importfunktion
[Rails] Asynchrone Implementierung der Like-Funktion
[Ruby on Rails] Paging-Funktion eingeführt
[Rails] Implementierung der Bildvorschau
[Rails] Tag-Verwaltungsfunktion (unter Verwendung von Acts-as-Taggable-On)
[Rails] Über die Implementierung der Like-Funktion
[Rails] Implementierung der Benutzerrückzugsfunktion
[Rails] Implementierung der CSV-Exportfunktion
Implementieren Sie eine einfache Anmeldefunktion in Rails
[Ruby on Rails] CSV-Ausgabefunktion
[Rails] Sprachposting-Funktion ~ Cloudinary, CarrierWave
Implementierung der Funktionsfunktion [Rails] gem ancestry category
[Ruby on Rails] Implementierung der Kommentarfunktion
[Ruby on Rails] DM, Chat-Funktion
Implementieren Sie die CSV-Download-Funktion in Rails
[Rails] Memo zur Implementierung der Kommentarfunktion
[Ruby on Rails] Suchfunktion (nicht ausgewählt)
[Rails] Hinzufügen der Ruby On Rails-Kommentarfunktion
Rails Grundlagen
Rails Review 1
[Rails] Funktionseinschränkungen im Gerät (Login / Logout)
Rails API
Schienenmigration
[Rails] first_or_initialize
Schienen Tutry
Über Schienen 6
Schienen Hinzufügen einer einfachen Anmeldefunktion
[Schienenentnahme] Erstellen Sie eine einfache Entnahmefunktion mit Schienen
Schienenfundament
Rails Memorandum