[RUBY] Implémentation de la fonction Rails CRUD ① (nouvel ajout, suppression cette fois)

Objectif de cet article Il s'agit de la procédure de création d'une application Web avec la fonction CRUD à l'aide de rails. C'est un site (tweet d'oiseaux) où vous pouvez publier des photos et des noms d'oiseaux.

Création d’une application de rails

Spécifiez la version des rails 6.0.0. Spécifiez le DB à utiliser (mysql dans ce cas) après -d.

rails _6.0.0_ new birdtweet -d mysql

changement de réglage.

config/database.yml


...
#  encoding: utf8mb4
  encoding: utf8
...

Création de DB

cd birdtweet
rails db:create

Édition de Gemfile Ouvrez le Gemfile directement sous le projet

Gemfile


# gem 'mysql2', '>= 0.4.4'
gem 'mysql2', '>= 0.5.3'
........
(Ligne inférieure du fichier)
gem 'pry-rails'

Mettre à jour les paramètres dans le terminal

bundle update

Création d'un modèle Au terminal
rails g model bird

Ajouter une colonne

db/migrate/2020********create_birds.rb


...
create_table :birds do |t|
      t.string :name
      t.text :pic
      t.timestamps
end
...

Mettez à jour les modifications avec des commandes!

rails db:migrate

Mettez quelques données dans la base de données sur la console.

rails c
Bird.create(name: "Tsunomedori", pic: "https://cdn.pixabay.com/photo/2020/05/26/13/22/puffins-5223057_1280.jpg ")
Bird.create(name: "Kawasemi", pic: "https://cdn.pixabay.com/photo/2017/02/07/16/47/kingfisher-2046453_1280.jpg ")
exit

Création d'un contrôleur Créez un contrôleur avec la commande suivante.
rails g controller birds

Il peut ou non être au pluriel, et cela peut prêter à confusion, Seul le modèle est singulier!

Flux à partir d'ici Le flux de création de chaque fonction est presque le même!

Ajouté à routes.rb ↓ Ajout de liens vers chaque fonction dans index.html.erb (index inattendu) ↓ Ajouté à birds_controller.rb ↓ Créez la fonction name.html.erb

Fonction d'affichage de liste Il y a sept actions dans les rails.
  • index: Liste
  • afficher: Détails
  • nouveau: transition vers un nouvel écran de création
  • créer: enregistrer de nouvelles données
  • edit: Transition vers l’écran d’édition
  • mise à jour: mise à jour des modifications
  • détruire: supprimer

Si vous ne souhaitez pas utiliser toutes les fonctions, spécifiez uniquement celles à utiliser avec la seule option.

config/routes.rb


#Derrière les ressources se trouve le pluriel du nom du modèle
  resources :birds, only: :index

app/controllers/birds_controller.rb


...
def index
    #Stockez les données du modèle Bird dans des variables d'instance.
    @birds = Bird.all
  end
...

création de fichier index.html.erb Affichez toutes les variables d'instance dans la vue à l'aide de la méthode each.

rb:app/views/birds/index.html.erb


<% @birds.each do |bird| %>
<%= bird.name %>
<div style=
"background-image: url(<%= bird.pic %>); 
 background-position: center center;
 background-size: cover;
 width: 300px; 
 height: 300px;
 margin-bottom: 10px;
 ">
</div>
<%end%>

Il était affiché comme ci-dessous! !! !! image.png

Nouvelle fonction de publication Le flux est également routes → contrôleur → vue, mais comme il s'agit d'ajout de données (créer) du passage à l'écran de publication (nouveau), nous ferons une série de flux deux fois!

routes.rb


Rails.application.routes.draw do
  #Derrière les ressources se trouve le pluriel du nom du modèle
  #S'il y a plusieurs actions, je les ferai sous la forme d'un tableau
  resources :birds, only: [:index, :new]
end

ruby:index.html.erb


<%=link_to 'Nouveau poste', new_bird_path, method: :get%>
...

image.png

birds_controller.rb


...
def new
  #Stockez l'instanciation du modèle Bird dans une variable d'instance.
  @bird = Bird.new
end
...

Créer new.html.erb

rb:app/views/birds/new.html.erb


<%#Même si vous ne décrivez pas l'URL de destination de la transition, elle effectuera la transition en fonction du modèle placé dans la variable d'instance.%>
<%=form_with(model: @bird, local: true) do |form| %>
  <%= form.text_field :name, placeholder: "Nom de l'oiseau" %>
  <%= form.text_field :pic, placeholder: "URL de la photo d'oiseau" %>
  <%= form.submit "Publier" %>
<%end%>

http://localhost:3000/birds/new Vous pouvez voir l'écran de publication lorsque vous accédez! image.png

Vient ensuite la fonction d'enregistrement des informations d'entrée.

routes.rb


Rails.application.routes.draw do
  #Derrière les ressources se trouve le pluriel du nom du modèle
  #S'il y a plusieurs actions, je les ferai sous la forme d'un tableau
  resources :birds, only: [:index, :new, :create]
end

birds_controller.rb Les données sont envoyées sous la forme d'un hachage à partir du formulaire.
Il est dangereux de recevoir toutes les données! </ b>
Vous n'avez besoin que du nom et de l'URL de la photo, mais la clé des informations de connexion est ajoutée de manière malveillante, et il est possible de modifier les informations de connexion d'une autre personne et de prendre le relais. Par conséquent, utilisez le paramètre strong.
De plus, sous la ligne qui décrit le privé, c'est une méthode qui ne peut pas être appelée à partir d'autres fichiers. L'avantage est que vous pouvez voir moins de fichiers lorsque vous avez plus de méthodes.

birds_controller.rb


...
  def create
    #oiseau défini sous privé_Reçoit et enregistre les paramètres spécifiés par param.
    Bird.create(bird_param)
  end

  private
  def bird_param
    # params.require(:Nom du modèle).permit(:Nom de colonne,:Nom de colonne,......)
    params.require(:bird).permit(:name, :pic)
  end
...

create.html.erb créer

rb:app/views/birds/create.html.erb


<h3>Publication terminée!</h3>
<a href="/birds">Lister</a>

image.png

image.png

Si vous le laissez tel quel, vous pourrez vous inscrire sans rien saisir. Par conséquent, j'écrirai une description pour le contrôle de validation.

app/models/birds.rb


class Bird < ApplicationRecord
  #Écrivez le nom de la colonne que vous souhaitez être obligé de saisir.
  validates :name, presence: true
  validates :pic, presence: true
end

Vous ne pouvez plus enregistrer les données à partir de maintenant! !!

Fonction de suppression

routes.rb


...
resources :birds, only: [:index, :new, :create, :destroy]
...

Pour trouver le lien vers la fonction de suppression, utilisez d'abord la commande

rails routes

ça ira. Ensuite, la sortie suivante sera sortie. Si vous ajoutez "_path" à la valeur Prefix, l'URL décrite dans l'URI sera sortie. image.png

Cette fois, il est supprimé, alors faites attention à la ligne qui dit DELETE in Verb. Le préfixe est "bird", vous pouvez donc le définir sur "bird_path". La méthode est "DELETE" dans "Verb", vous pouvez donc simplement dire "supprimer". Après cela, transmettez également l'identifiant!

index.html.erb


...
<%= bird.name %><%=link_to "Effacer", bird_path(bird.id), method: :delete%>
...

Le lien s'affiche. image.png

bird_controller.rb


...
  def destroy
    #Cette fois, je n'enverrai nulle part les données extraites, donc@N'attachez pas.
    bird = Bird.find(params[:id])
    bird.destroy
  end
...

destroy.html.erb


<a href="/birds">Écran de liste</a>

image.png image.png Macareux moine a été supprimé correctement!

Recommended Posts

Implémentation de la fonction Rails CRUD ① (nouvel ajout, suppression cette fois)
Implémentation de la fonction Rails CRUD ② (édité et détaillé cette fois)
Échafaudage de procédure d'implémentation de fonction CRUD de base
Implémentation de la fonction de recherche floue Rails
[Rails] Implémentation de la fonction tutoriel
[Rails] Implémentation d'une fonction similaire
[Rails] Implémentation d'une nouvelle fonction d'enregistrement au format assistant à l'aide de devise
[Rails] Implémentation de la suppression logique utilisateur
[Rails] Implémentation de la fonction d'importation CSV
[Rails] Implémentation asynchrone de la fonction similaire
[Rails] Implémentation de la fonction de prévisualisation d'image
[Rails] Implémentation de la fonction de retrait utilisateur
[Rails] Implémentation de la fonction d'exportation CSV
[Rails] Fonction de commentaire (enregistrement / affichage / suppression)
[Rails] Implémentation de la fonction coupon (avec fonction de suppression automatique par traitement par lots)
[Rails] Implémentation de la fonction de catégorie d'ascendance gemme
[Ruby on Rails] Implémentation de la fonction de commentaire
[Rails] Commentaire mémo de procédure d'implémentation
[Rails] Ajout de la fonction de commentaire Ruby On Rails
Rails Ajout d'une fonction de connexion facile et facile
Rails [Pour les débutants] Implémentation de la fonction de commentaire
[Ruby on rails] Implémentation d'une fonction similaire
[Ruby on Rails] Suppression logique (fonction de retrait)
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
Implémentation de la fonction de connexion Ruby on Rails (Session)
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
Ruby on Rails Implémentation de la fonction d'envoi automatique de courrier