[RUBY] Über Rohölverarbeitung und Produkte mit Gerät (für Anfänger)

Warum ich diesmal gepostet habe

Nutzen Sie das, was ich in der Online-Schule gelernt habe Ich beschloss, dies als Memorandum zu schreiben. Da es von einem Amateur geschrieben wurde, würde ich es begrüßen, wenn Sie mir vergeben könnten, wenn es etwas anderes gäbe. Es ist schnell, aber lass uns zum ersten Mal gehen.

Entwicklungsumgebung

Code

Schienen neu Der Name der App, die Sie erstellen möchten-d postgresql

❇︎ Standardschienen sind standardmäßig SQLite3, sodass Sie die Datenbank mit -d angeben können.

Dann mach

【Terminal】
rails db:create

--Drop den Ordner Ihrer eigenen App in VS Code. Dann können Sie es mit VS Code bearbeiten.

Installieren Sie Gem Devise

--Schreibe folgendes in gemfile

【gemfile】

 gem 'devise'
【Terminal】

bundle install

Geben Sie nach der Installation des Gems die Befehle ein, die zum Implementieren der Anmeldefunktion von devise erforderlich sind

【Terminal】
 rails g devise:install(Achten Sie darauf, den Doppelpunkt nicht zu vergessen)

❇︎ Der Grund für Rails g Devise: Install ist, dass Devise einen dedizierten Befehl verwendet und Sie müssen dies tun, da Sie eine Konfigurationsdatei erstellen müssen

Erstellen Sie ein Nur-Geräte-Modell

【Terminal】
rails g devise user(Ich brauche keinen Doppelpunkt)

Führen Sie nach Abschluss den folgenden Befehl aus


【Terminal】
 rails db:migrate

Erstellen Sie dann eine Navigationsleiste

<% if user_signed_in? %>
 <%= link_to "Ausloggen", destroy_user_session_path, method: :delete %>
 <%= link_to "oben", products_path %>
 <%= link_to "Zum Buchungsbildschirm", new_product_path %>

<% else %>
 <%= link_to "Einloggen", new_user_session_path %>
 <%= link_to "Anmelden", new_user_registration_path %>
<% end %>

Nach der Implementierung der Navigationsleiste müssen Sie im nächsten Schritt das Produktmodell und den Produktcontroller erstellen.

--Schreib das Folgende

【Terminal】
rails g model product
class CreateProducts < ActiveRecord::Migration[5.2]
  def change
   create_table :products do |t|
      t.string :name
      t.integer :price
      t.integer :user_id
      #Bisher
      t.timestamps
    end
  end
end

Führen Sie nach dem Ausführen des obigen Vorgangs Folgendes aus

【Terminal】
rails db:migrate
【seeds.rb】
Product.create(name: "Erste Schritte mit Ruby", price: 2500, user_id: 1)
Product.create(name: "Rails Grundlagen", price: 2900, user_id: 1)
Product.create(name: "PHP-Grundlagen", price: 1500, user_id: 1)

Geben Sie nach Abschluss des obigen Vorgangs den folgenden Befehl ein

【Terminal】
 rails db:seed

--Wenn dies keinen Fehler verursacht, wird es erfolgreich in der Tabelle registriert.

Geben Sie nach erfolgreicher Registrierung den folgenden Befehl ein

【Terminal】
rails g controller Products

Führen Sie nach Eingabe des Befehls die folgende Verarbeitung durch

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

Sobald dies erledigt ist, definieren Sie die Indexaktion

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

Nachdem die Indexaktion definiert wurde, besteht der nächste Schritt darin, eine entsprechende Ansichtsdatei zu erstellen.

【index.html.erb】
<h1>Neue Beitragsliste</h1>
   <% if user_signed_in? %>
   <% @products.each do |product| %>
    <p>Produktname:<%= product.name %></p>
    <p>Geldbetrag:<%= product.price %></p>
   <% else %>
Entschuldigung, aber bitte einloggen
   <% end %>
 <% end %>

--Wenn Sie die Anmeldefunktion mit devise implementieren, wird der Anmelde- / Anmeldebildschirm automatisch generiert, ist jedoch in Ansichten anwendbar. Die zu verwendende Datei existiert nicht. Daher ist es nicht möglich, Änderungen am Anmeldebildschirm vorzunehmen. Wenn Sie Änderungen vornehmen möchten, müssen Sie den Befehl devise verwenden, um eine Ansichtsdatei zu generieren.

【Terminal】
rails g devise:views

Nachdem Sie die oben genannten Schritte ausgeführt haben, müssen Sie im nächsten Schritt eine neue Aktion für Products_controller definieren

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

Erstellen einer Ansichtsdatei

【new.html.erb】
<h1>Neuer Beitrag</h1>
<%= form_with model: @product, local: true do |form| %>
<p>Produktname:<%= form.text_field :name, required: true %></p>
<p>Geldbetrag:<%= form.text_field :age, required: true %></p>
<%= form.submit "Senden" %>
<% end %>

Definieren Sie die Erstellungsaktion

【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

――Nachdem Sie die Erstellungsaktion definieren können, ist der starke Parameter hier! Beschrieben wie folgt am unteren Rand des Produktcontrollers

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

――Erläutert dies, dass nur der dem Benutzermodell zugeordnete (: Name,: Preis) zulässig ist. Das definieren

Schreiben Sie nach Abschluss des obigen Vorgangs den folgenden Befehl oben in products_controller

【products_controller.rb】
class ProductsController < ApplicationController
  before_action :move_to_index, except: :index ← Hier hinzufügen

  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?← Hier hinzufügen
  end
Unten weggelassen

Ändern Sie die Route teilweise

【routes.rb】
 Rails.application.routes.draw do
 root to: 'products#index'
 resources :products
 resources :users, only: :show ← Füge dies hinzu
 end

Ich werde einen neuen Benutzer-Controller erstellen

【Terminal】
rails g controller Users

Beschreiben Sie Folgendes im Controller des Benutzers

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

Beschreiben Sie Folgendes in show.html.erb (Benutzer-Controller-Ansichtsdatei)

【show.html.erb】
<% @products.each do |product| %>
  <p>Produktname:<%= product.name %></p>
  <p>Preis:<%= product.price %></p>
<% end %>

Fügen Sie application.html.erb (Navigationsleiste) die folgende Beschreibung hinzu:

<%= link_to 'zu meiner Seite', user_path(current_user.id) %>


Um die ID des Benutzers anzuzeigen, der in der Liste der gekauften Produkte gekauft hat, schreiben Sie Folgendes in index.html.erb von / views / products

【index.html.erb】
<h1>Neue Beitragsliste</h1>
   <% if user_signed_in? %>
    <% @products.each do |product| %>
    <p>Produktname:<%= product.name %></p>
    <p>Geldbetrag:<%= product.price %></p>
    <p>Mitgliedsnr.:<%= product.user.id %></p>   
   <% else %>
Entschuldigung, aber bitte einloggen
   <% end %>
 <% end %>

―― Wenn dies jedoch unverändert bleibt, tritt ein Fehler auf. Was von hier aus zu tun ist, ist der Prozess, der Assoziation genannt wird Ausführen. Als Bild ein Bild, das Benutzer und Produkt kombiniert

Das erste, was zu tun ist

【product.rb】
 class Product < ApplicationRecord
  belongs_to :Benutzer ← Beschreibe hier
 end

――Wenn Sie erklären, wem gehört das Produkt? Wenn Sie darüber nachdenken, sollten Sie denken, dass Sie ein Benutzer sind. Schreiben Sie so

Was macht man als nächstes

【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 :Produkte ← Beschreiben Sie hier
 end

――Erläutern, was hat der Benutzer viel? Wenn Sie denken, dass Sie viele Produkte haben Ich werde es so schreiben

Nachdem die Zuordnung abgeschlossen ist, werden wir zwei Verbesserungen vornehmen.

Zuerst habe ich die Show-Aktion von Userscontroller früher geschrieben, aber sie ist etwas klobig. Ändern Sie sie daher wie folgt

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

--Nach der veränderung

【users_controller.rb】
def show
 @products = User.find(current_user.id)
end

Der zweite Punkt besteht darin, show.html.erb (userscontroller) wie folgt zu ändern.

【show.html.erb】
<% @products.each do |product| %>
  <p>Produktname:<%= product.name %></p>
  <p>Preis:<%= product.price %></p>
<% end %>

--Nach der veränderung

【show.html.erb】
<% @user.products.each do |product| %>(←@user.Produktwechsel)
  <p>Produktname:<%= product.name %></p>
  <p>Preis:<%= product.price %></p>
<% end %>

Schließlich

Damit sind die Implementierung der Login-Funktion und der grobe Prozess der Rohverarbeitung abgeschlossen. Ich wollte die Implementierung von Bearbeitungs- und Aktualisierungsaktionen, die Flash-Funktion, die Dekoration mit Bootstrap usw. erklären, aber dieses Mal werde ich es hier lassen. Wenn Sie in Zukunft Ihr eigenes Portfolio erstellen und die Anmeldefunktion implementieren, ist es besser, zuerst das Gerät zu implementieren und dann die Rohverarbeitung usw. durchzuführen, damit es weniger wahrscheinlich ist, dass es hängen bleibt. (Ich war so lol) Vielen Dank.

Recommended Posts

Über Rohölverarbeitung und Produkte mit Gerät (für Anfänger)
[Für Anfänger] Über Lambda-Ausdrücke und Stream-API
Über für Anweisung und wenn Anweisung
(Für Anfänger) [Rails] Installieren Sie das Gerät
Java für Anfänger, Ausdrücke und Operatoren 1
Java für Anfänger, Ausdrücke und Operatoren 2
If-Anweisung und Verzweigungsverarbeitung
[Für Java-Anfänger] Informationen zur Ausnahmebehandlung
Klassen und Instanzen Java für Anfänger
[Für Anfänger] Unterschied zwischen Java und Kotlin
Eindrücke und Zweifel an der erstmaligen Verwendung von Java in Android Studio
[Für Anfänger] Ich habe versucht, DBUnit mit Eclipse zu verwenden
[Für Anfänger] Ich habe versucht, JUnit 5 mit Eclipse zu verwenden
[Für Anfänger] Testen Sie die Benutzerregistrierung bei RSpec
Anfänger versuchen Android Studio Teil 2 (Ereignisverarbeitung)
[Für Anfänger] Verfahren zum Erstellen eines Controllers mithilfe von Schienen