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
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.
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 "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
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
rake tasks:notification
rake [nom du nom]:[Nom de la tâche]
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.
heroku addons:add scheduler:standard
Réglez l'heure et la tâche à exécuter sur Heroku Scheduler
heroku run rake task:notification
Recommended Posts