[RUBY] Erstellen Sie eine EC-Site mit Rails5 Address ~ Adresse, Genre-Modell ~

Einführung

Dies ist eine Fortsetzung der Serie "Erstellen einer EC-Site mit Rails 5 ⑥" (https://qiita.com/GreenFingers_tk/items/876bd51eb79acaa2bc5a), die eine EC-Site erstellt, auf der Sie in einer fiktiven Bäckerei einkaufen können. Dieses Mal kehren wir zur Implementierung des Hauptteils der Anwendung zurück und erstellen den Bereich um das Adressmodell, in dem die Zieladresse des gekauften Brotes verwaltet wird, und das Genre-Modell, das die Produkte organisiert.

Quellcode

https://github.com/Sn16799/bakeryFUMIZUKI

Modellassoziation

association.jpg

Address controller

app/controllers/addresses_controller.rb


class AddressesController < ApplicationController

  before_action :authenticate_customer!
  before_action :set_customer

  def edit
    @address = Address.find(params[:id])
    if @address.customer_id != current_customer.id
      redirect_back(fallback_location: root_path)
      flash[:danger] = 'Ich kann nicht auf die gesuchte Seite zugreifen.'
    end
  end

  def index
    @address = Address.new
    @addresses = @customer.addresses
  end

  def create
    @address = @customer.addresses.build(address_params)
    if @address.save
      flash[:success] = 'Ich habe eine neue Adresse registriert!'
      redirect_to addresses_path
    else
      @addresses = @customer.addresses
      flash[:danger] = 'Bitte überprüfen Sie den Eingabeinhalt. Ist jedes Eingabefeld mit zwei oder mehr Zeichen ausgefüllt?'
      render :index
    end
  end

  def update
    @address = Address.find(params[:id])
    if @address.update(address_params)
      flash[:success] = 'Adressinformationen wurden aktualisiert!'
      redirect_to addresses_path
    else
      flash[:danger] = 'Bitte überprüfen Sie den Eingabeinhalt. Ist jedes Eingabefeld mit zwei oder mehr Zeichen ausgefüllt?'
      render :edit
    end
  end

  def destroy
    @address = Address.find(params[:id])
    @address.destroy
    flash[:info] = 'Die registrierte Adresse wurde gelöscht.'
    redirect_to addresses_path
  end

  private

  def set_customer
    @customer = current_customer
  end

  def address_params
    params.require(:address).permit(:post_code, :address, :addressee)
  end
end

Indexbildschirm

html:app/views/addresses/index.html.erb


<div class="col-lg-10 offset-lg-1 offset-1 space">
  <div class="container-fluid">
    <h2>
      <span style="display: inline-block;">Lieferanschrift</span>
      <span style="display: inline-block;">Anmeldung/Aufführen</span>
    </h2>
  </div>
  <!--Neues Adressformular-->
  <div class="container space">
    <h3>Registrieren Sie eine neue Adresse</h3>
    <%= form_with(model: @address, local: true, class: 'container-fluid') do |f| %>
    <div class="form-group">
      <%= f.label :Postleitzahl (ohne Bindestriche)%>
      <%= f.text_field :post_code, class: 'form-control' %>
    </div>
    <div class="form-group">
      <%= f.label :Adresse%>
      <%= f.text_field :address, class: 'form-control' %>
    </div>
    <div class="form-group">
      <%= f.label :Adresse%>
      <%= f.text_field :addressee, class: 'form-control' %>
    </div>
    <div class="action w-25 offset-lg-11">
      <%= f.submit 'zu registrieren', class: 'btn btn-danger' %>
    </div>
    <% end %>
  </div>

  <!--Adressliste-->
  <div class="container space">
    <h3>Adressliste</h3>
    <div class="row">
      <div class="col-lg-3">
        <strong>Postleitzahl</strong>
      </div>
      <div class="col-lg-3">
        <strong>Adresse</strong>
      </div>
      <div class="col-lg-3">
        <strong>Adresse</strong>
      </div>
    </div>
    <% @addresses.each do |address| %>
    <div class="row">
      <div class="col-lg-3">
        <%= address.post_code %>
      </div>
      <div class="col-lg-3">
        <%= address.address %>
      </div>
      <div class="col-lg-3">
        <%= address.addressee %>
      </div>
      <div class="col-lg-3">
        <%= link_to "Bearbeiten", edit_address_path(address), class:"btn btn-danger" %>
        <%= link_to "löschen", address_path(address), method: :delete, class:"btn btn-danger" %>
      </div>
    </div>
    <% end %>
  </div>
</div>

Bildschirm bearbeiten

html:app/views/addresses/edit.html.erb


<div class="col-lg-10 offset-lg-1 space">
  <div class="container">
    <h2>Lieferadresse bearbeiten</h2>
    <%= form_with(model: @address, local: true) do |f| %>
    <div class="form-group">
      <%= f.label :Postleitzahl (ohne Bindestriche)%>
      <%= f.text_field :post_code, autofocus: true, class: 'form-control' %>
    </div>
    <div class="form-group">
      <%= f.label :Adresse%>
      <%= f.text_field :address, class: 'form-control' %>
    </div>
    <div class="form-group">
      <%= f.label :Adresse%>
      <%= f.text_field :addressee, class: 'form-control' %>
    </div>
    <div class="action w-25 offset-lg-11">
      <%= f.submit 'Aktualisieren', class: 'btn btn-danger' %>
    </div>
    <% end %>
  </div>
</div>

Genre controller

app/controllers/genres_controoler.rb


class GenresController < ApplicationController

  def show
    @genre = Genre.find(params[:id])
    @genres = Genre.where(validity: true)
    @products = @genre.products.page(params[:page]).per(9)
  end

  private

  def genre_params
    params.require(:genre).permit(:name,:id)
  end
end

index Obwohl der Dateiname Index ist, gibt es keinen Bildschirm mit der Liste der Produktgenres, und diese Datei wird auf einigen Seiten als Teilvorlage aufgerufen, damit sie nach Genres eingegrenzt werden kann. Es ist im Wesentlichen eine Seitenleiste.

html:app/views/genres/_index.html.erb


<div id="sidebar" class="col-lg-2">
  <table class='table'>
  <thead>
    <tr>
      <th>Genre-Suche</th>
    </tr>
  </thead>
  <tbody>
    <% genres.each do |genre| %>
    <tr>
      <td><%= link_to  genre.name, genre_path(genre) %></td>
    </tr>
    <% end %>
    <tr>
      <td><%= link_to "⇒ Alle Produkte anzeigen", products_path, class: 'dark-blue-letter' %></td>
    </tr>
  </tbody>
</table>
</div>

Bildschirm anzeigen

Der detaillierte Bildschirm des Produktgenres ist ein Bildschirm, der die zum Genre gehörenden Produkte wie "Brot" und "Beilagenbrot" eingrenzt und anzeigt.

html:app/views/genres/show.html.erb


<div class="col-lg-10 space">
  <div class="container">
  <h2><%= @genre.name %>Alles auflisten<%= @genre.products.count %>Samen)</h2>
</div>
  <div class="container">
    <% @genre.products.each do |gp| %>
      <%= render 'products/box', product: gp %>
    <% end %>
  </div>
</div>
<%= render 'genres/index', genres: @genres %>

* Teilvorlage

html:app/views/products/_box.html.erb


<div class="col-lg-4 product-box space">
  <%= link_to product_path(product) do %>
    <div class="row">
      <h4><%= product.name %></h4>
    </div>
    <div class="row">
      <%= attachment_image_tag(product, :image, :fill, 220, 180, fallback:  'no_img.jpg') %>
    </div>
  <% end %>
  <div class="row">
    <h4><%= price_include_tax(product.price) %></h4>
  </div>
</div>

In der Datenbank wird nur der ** steuerlich ausgeschlossene ** Preis gespeichert, aber ich möchte ihn auf dem Bildschirm auf den ** steuerlich eingeschlossenen ** Preis setzen. Verwenden Sie in diesem Fall die Hilfsmethode.

Helfer

app/helpers/application_helper.rb


  def price_include_tax(price)
    price = price * 1.08
    "#{price.round}Kreis"
  end

Nachtrag

Sowohl Adresse als auch Genre haben nur Standard-CRUD-Funktionen, daher glaube ich, dass ich dies fast ohne zu zögern geschafft habe. Es wird von nun an schwierig sein ... Das Bestellmodell mit der Bestellfunktion war ein großes Problem, als ich es zuvor erstellt habe. Kann ich es jedoch zu einem reaktionsschnellen Bildschirm machen und es mit präziserem Code reproduzieren? Weiter zum nächsten Mal!

Recommended Posts

Erstellen Sie eine EC-Site mit Rails5 Address ~ Adresse, Genre-Modell ~
Erstellen Sie eine EC-Site mit Rails5 ⑤ ~ Kundenmodell ~
Erstellen Sie eine EC-Site mit Rails 5 ⑩ ~ Erstellen Sie eine Bestellfunktion ~
Erstellen einer EC-Site mit Rails 5 ⑨ ~ Erstellen einer Warenkorbfunktion ~
Erstellen Sie eine EC-Site mit Rails5 ④ ~ Kopf- und Fußzeile ~
Erstellen Sie eine EC-Site mit Rails5 seed ~ Startdateneingabe ~
Erstellen Sie eine EC-Site mit Rails5 ③-Set Model-Assoziationen und anderen Dingen-
Erstellen Sie eine EC-Site mit Rails5 Boot ~ Bootstrap4-Einstellungen, Controller- / Aktionsdefinition ~
Erstellen einer EC-Site mit Rails5 ①-App-Konfiguration, verschiedene Edelsteinvorbereitungen, Modell- / Routing-Erstellung-
Erstellen Sie eine EC-Site mit Streifen! (Konto-Erstellung)
[Rails] Erstellen Sie eine Anwendung
Erstellen einer EC-Site mit Rails5 Product ~ Produktmodell, bedingte Verengungsanzeige für Eltern und Kinder ~
Erstellen Sie einen Service mit einem leeren Modell Liferay 7.0 / DXP
[Rails] EC-Site-Cart-Funktion
Erstellen Sie mit JAVA eine unveränderliche Klasse
Erstellen Sie ein Portfolio mit Rails + Postgres SQL
Erstellen Sie eine App mit Spring Boot 2
Erstellen Sie eine App-Katalogsite mit CLI für Microsoft 365 mit Docker
[Rails] DB-Design für EC-Standort
Erstellen Sie eine Excel-Datei mit poi
Erstellen Sie eine App mit Spring Boot
Erstellen Sie meine Seite mit Rails
Lassen Sie uns eine Instanz mit .new selbst erstellen. .. ..
[Java] Erstellen Sie mit Gradle ein ausführbares Modul
[Rails6] Erstelle eine neue App mit Rails [Anfänger]
Einfache Bereitstellung mit Capistrano + AWS (EC2) + Rails
[Schienenentnahme] Erstellen Sie eine einfache Entnahmefunktion mit Schienen
[Rails 5] Erstelle eine neue App mit Rails [Anfänger]
[Ruby on Rails] Modelltest mit RSpec
Lassen Sie uns mit Rails einen Fehlerbildschirm erstellen
Nuxt.js × Erstellen Sie eine Anwendung im Rails-API-Modus
Downgrade einer vorhandenen App, die mit Rails 5.2.4 erstellt wurde, auf 5.1.6
[Rails] Rails neu, um eine Datenbank mit PostgreSQL zu erstellen
Erstellen Sie eine JSON-API, die die RSA-Verschlüsselung mit Wicket unterstützt
Holen Sie sich ein untergeordnetes Modell mit Schienen created_at desc scope
Erstellen Sie einen Team-Chat mit Rails Action Cable
Erstellen Sie eine App, indem Sie die Rails-Version angeben
Rails6.0 ~ So erstellen Sie eine umweltfreundliche Entwicklungsumgebung
Erstellen Sie einen Annotator, der Kuromoji mit NLP4J verwendet. [007]
So erstellen Sie Elementvariablen mit dem JPA-Modell
[Rails] So erstellen Sie eine Umgebung mit Docker