[RUBY] À propos du traitement du crud et des produits utilisant un appareil (pour les débutants)

Pourquoi j'ai posté cette fois

Utiliser ce que j'ai appris à l'école en ligne J'ai décidé d'écrire ceci sous forme de mémorandum. Puisqu'il est écrit par un amateur, j'apprécierais que vous me pardonniez s'il y avait quelque chose de différent. C'est rapide, mais allons-y pour la première fois.

Environnement de développement

code

rails new Le nom de l'application que vous souhaitez créer-d postgresql

 Les rails de base utilisent par défaut SQLite3, vous pouvez donc spécifier la base de données avec -d.

Alors fais

【Terminal】
rails db:create

Installer un bijou

【gemfile】

 gem 'devise'

--Lorsque l'ajout est terminé, exécutez ce qui suit

【Terminal】

bundle install

Une fois la gemme installée, entrez les commandes nécessaires pour implémenter la fonction de connexion de l'appareil

【Terminal】
 rails g devise:install(Attention à oublier le côlon)

❇︎ La raison pour laquelle les rails g conçoivent: install est que l'appareil utilise une commande dédiée et Vous devez le faire car vous devez créer un fichier de configuration

Créer un modèle conçu uniquement

【Terminal】
rails g devise user(Je n'ai pas besoin d'un colon)

Après avoir terminé, exécutez la commande suivante


【Terminal】
 rails db:migrate

Créez ensuite une barre de navigation

<% if user_signed_in? %>
 <%= link_to "Se déconnecter", destroy_user_session_path, method: :delete %>
 <%= link_to "Haut", products_path %>
 <%= link_to "Vers l'écran de publication", new_product_path %>

<% else %>
 <%= link_to "S'identifier", new_user_session_path %>
 <%= link_to "s'inscrire", new_user_registration_path %>
<% end %>

Après avoir implémenté la barre de navigation, l'étape suivante consiste à créer le modèle de produit et le contrôleur de produit.

【Terminal】
rails g model product

--Une fois terminé, modifiez l'élément du fichier de migration comme suit

class CreateProducts < ActiveRecord::Migration[5.2]
  def change
   create_table :products do |t|
      t.string :name
      t.integer :price
      t.integer :user_id
      #Jusque là
      t.timestamps
    end
  end
end

Après avoir exécuté ce qui précède, exécutez ce qui suit

【Terminal】
rails db:migrate

--Modifier les données dans db / seedss.rb

【seeds.rb】
Product.create(name: "Premiers pas avec Ruby", price: 2500, user_id: 1)
Product.create(name: "Notions de base sur les rails", price: 2900, user_id: 1)
Product.create(name: "Bases de PHP", price: 1500, user_id: 1)

Après avoir terminé ce qui précède, entrez la commande suivante

【Terminal】
 rails db:seed

Après vous être enregistré avec succès, entrez la commande suivante

【Terminal】
rails g controller Products

Après avoir entré la commande, effectuez le traitement suivant

--Modifiez config / routes.rb comme suit

 Rails.application.routes.draw do
 root to: 'products#index'
 resources :products
 end

Une fois ce qui précède est fait, définissez l'action d'index

【products_controller.rb】
 class ProductsController < ApplicationController
 def index
  @products= Product.all
  end
 end

Une fois l'action d'index définie, l'étape suivante consiste à créer un fichier de vue correspondant.

【index.html.erb】
<h1>Nouvelle liste de messages</h1>
   <% if user_signed_in? %>
   <% @products.each do |product| %>
    <p>Nom du produit:<%= product.name %></p>
    <p>Somme d'argent:<%= product.price %></p>
   <% else %>
Excusez-moi, mais veuillez vous connecter
   <% end %>
 <% end %>

--Lorsque vous implémentez la fonction de connexion avec l'appareil, l'écran de connexion / inscription est automatiquement généré, mais il est applicable dans les vues. Le fichier à utiliser n'existe pas. Par conséquent, il n'est pas possible d'apporter des modifications à l'écran de connexion tel quel. Si vous souhaitez apporter des modifications, vous devez utiliser la commande devise pour générer un fichier de vue.

【Terminal】
rails g devise:views

Une fois que vous avez fait ce qui précède, l'étape suivante consiste à définir une nouvelle action pour Products_controller

【products_controller.rb】
 class ProductsController < ApplicationController
  def new
   @product = Product.new
  end
 end

Créer un fichier de vue

【new.html.erb】
<h1>Nouveau poste</h1>
<%= form_with model: @product, local: true do |form| %>
<p>Nom du produit:<%= form.text_field :name, required: true %></p>
<p>Somme d'argent:<%= form.text_field :age, required: true %></p>
<%= form.submit "Envoyer" %>
<% end %>

Définir l'action de création

【products_controller.rb】
 def create
  Product.create(name: product_params[:name], price: product_params[:price], 
  user_id: current_user.id)
  redirect_to root_path
  end

――Une fois que vous pouvez définir l'action de création, le paramètre fort est ici! Décrit comme suit en bas du contrôleur de produits

 private
  def product_params
   params.require(:user).permit(:name, :price)
  end

Après avoir terminé ce qui précède, écrivez la commande suivante en haut de products_controller

【products_controller.rb】
class ProductsController < ApplicationController
  before_action :move_to_index, except: :index ← Ajouter ici

  def index
    @products = Product.all
  end

  def new
    @product = Product.new
  end

  def create
    Product.create(name: product_params[:name], price: product_params[:price], user_id: current_user.id)
  end

  def move_to_index
    redirect_to action: :index unless user_signed_in?← Ajouter ici
  end
Omis ci-dessous

Modifier partiellement l'itinéraire

【routes.rb】
 Rails.application.routes.draw do
 root to: 'products#index'
 resources :products
 resources :users, only: :show ← Ajouter ceci
 end

--Cette fois, seule l'action show est utilisée dans users_controller, donc écrivez comme ci-dessus.

Je vais créer un nouveau contrôleur d'utilisateurs

【Terminal】
rails g controller Users

Décrivez les éléments suivants dans le contrôleur des utilisateurs

【users_controller.rb】
 class UsersController < ApplicationController
  def show
   @products = Product.where(user_id: current_user.id)
  end
 end

Décrivez ce qui suit dans show.html.erb (fichier de vue userscontroller)

【show.html.erb】
<% @products.each do |product| %>
  <p>Nom du produit:<%= product.name %></p>
  <p>prix:<%= product.price %></p>
<% end %>

Ajoutez la description suivante à application.html.erb (barre de navigation)

<%= link_to 'vers ma page', user_path(current_user.id) %>


Afin d'afficher l'ID de l'utilisateur qui a acheté dans la liste des produits achetés, écrivez ce qui suit dans index.html.erb de / views / products

【index.html.erb】
<h1>Nouvelle liste de messages</h1>
   <% if user_signed_in? %>
    <% @products.each do |product| %>
    <p>Nom du produit:<%= product.name %></p>
    <p>Somme d'argent:<%= product.price %></p>
    <p>No de membre.:<%= product.user.id %></p>   
   <% else %>
Excusez-moi, mais veuillez vous connecter
   <% end %>
 <% end %>

――Cependant, si cela reste tel quel, une erreur se produira. Que faire d'ici est le processus d'association Éxécuter. En tant qu'image, une image qui combine l'utilisateur et le produit

Première chose à faire

--Modifiez product.rb dans l'application / les modèles comme suit

【product.rb】
 class Product < ApplicationRecord
  belongs_to :utilisateur ← Décrivez ici
 end

――Si vous expliquez, à qui appartient le produit? Si vous y réfléchissez, vous devriez penser que vous êtes un utilisateur. Ecrire comme ça

Que faire ensuite

--Modifiez user.rb dans l'application / les modèles comme suit

【user.rb】
class User < ApplicationRecord 
#Include default devise modules. Others available are:
 #:confirmable, :lockable, :timeoutable, :trackable and :omniauthable
 devise :database_authenticatable, :registerable,
          :recoverable, :rememberable, :validatable
 has_many :produits ← Décrivez ici
 end

――Expliquant, qu'est-ce que l'utilisateur a beaucoup? Si vous pensez que vous avez beaucoup de produits Je l'écrirai comme ça

Maintenant que l'association est terminée, nous allons apporter deux améliorations.

Tout d'abord, j'ai écrit l'action show de userscontroller plus tôt, mais c'est un peu maladroit, alors changez-la comme suit

【users_controller.rb】
 class UsersController < ApplicationController
 def show
 @products = Product.where(user_id: current_user.id)
  end
 end
【users_controller.rb】
def show
 @products = User.find(current_user.id)
end

Le deuxième point est de changer show.html.erb (userscontroller) comme suit.

【show.html.erb】
<% @products.each do |product| %>
  <p>Nom du produit:<%= product.name %></p>
  <p>prix:<%= product.price %></p>
<% end %>
【show.html.erb】
<% @user.products.each do |product| %>(←@user.Changement de produits)
  <p>Nom du produit:<%= product.name %></p>
  <p>prix:<%= product.price %></p>
<% end %>

finalement

Avec cela, la mise en œuvre de la fonction de connexion et le processus approximatif de traitement brutal sont terminés. Je voulais expliquer l'implémentation des actions d'édition et de mise à jour, la fonction flash, la décoration avec bootstrap, etc., mais cette fois je vais le laisser ici. À l'avenir, lors de la création de votre propre portefeuille, lors de l'implémentation de la fonction de connexion, il est préférable d'implémenter d'abord la conception, puis d'effectuer un traitement grossier, etc., afin qu'il soit moins susceptible de rester bloqué. (J'étais comme ça lol) Merci beaucoup.

Recommended Posts

À propos du traitement du crud et des produits utilisant un appareil (pour les débutants)
[Pour les débutants] À propos des expressions lambda et de l'API Stream
À propos de l'instruction et de l'instruction if
(Pour les débutants) [Rails] Installer Devise
Java pour les débutants, les expressions et les opérateurs 1
Java pour les débutants, les expressions et les opérateurs 2
Traitement des relevés et des succursales
[Pour les débutants en Java] À propos de la gestion des exceptions
Classes et instances Java pour les débutants
[Pour les débutants] Différence entre Java et Kotlin
Impressions et doutes sur l'utilisation de Java pour la première fois dans Android Studio
[Pour les débutants] J'ai essayé d'utiliser DBUnit avec Eclipse
[Pour les débutants] J'ai essayé d'utiliser JUnit 5 avec Eclipse
[Pour les débutants] Testez l'enregistrement des utilisateurs avec RSpec
Les débutants essaient d'utiliser Android Studio Partie 2 (traitement des événements)
[Pour les débutants] Procédure de création d'un contrôleur à l'aide de rails