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.
https://github.com/Sn16799/bakeryFUMIZUKI
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
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>
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>
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 %>
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.
app/helpers/application_helper.rb
def price_include_tax(price)
price = price * 1.08
"#{price.round}Kreis"
end
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