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
app/models/user.rb
class User < ApplicationRecord
has_many :notifications, dependent: :destroy
end
app/models/task.rb
class Task < ApplicationRecord
belongs_to :user
has_one :notification, dependent: :destroy
end
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
Name der Aufzählungsspalte: {Namensdefinition:Numerischer Wert}
Es handelt sich um einen Aufzählungstyp. Speichern Sie bei der Registrierung die Namensdefinition.
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
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
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
rake tasks:notification
rake [Name des Namensstücks]:[Aufgabennname]
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.
heroku addons:add scheduler:standard
Stellen Sie die Zeit und die Aufgabe ein, die Sie auf Heroku Scheduler ausführen möchten
heroku run rake task:notification
Recommended Posts