Ruby on Rails Lernrekord -2020.10.09

Ein Schwarzes Brett, das nur beim Anmelden eine Funktion hat Erstellen eines einzeiligen schwarzen Bretts ```$ cd bbs_users $ rails g scaffold article user_id:integer content:string $ rails db:migrate ```

Eingabe der Anfangsdaten

db/seeds.rb


Article.create(user_id: 1, content: 'hello world')
Article.create(user_id: 1, content: 'hello paiza')
Article.create(user_id: 2, content: 'Welt von Hallo, alle zusammen')

Reflektiert in der Datenbank

$ rails db:seed

Beim Anmelden dürfen nur bestimmte Aktionen ausgeführt werden

articles_controller.rb


before_action :authenticate_user!, only: [:new, :create, :edit, :update, :destroy]
before_action :set_article, only: [:show, :edit, :update, :destroy]

Assoziationsmodell und Benutzermodell

model/article.rb


class Article < ApplicationRecord
    belongs_to :user
end

Anzeige der E-Mail-Adresse des Posters

views/articles/index.html.erb


<table>
  <thead>
    <tr>
      <th>User</th>
      <th>Content</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @articles.each do |article| %>
      <tr>
        <td><%= article.user.email %></td>
        <td><%= article.content %></td>
        <td><%= link_to 'Show', article %></td>
        <td><%= link_to 'Edit', edit_article_path(article) %></td>
        <td><%= link_to 'Destroy', article, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

Gemeinsame Navigation anzeigen

app/views/layouts/application.html.erb


<body>
  <% if user_signed_in? %>
    Logged in as <strong><%= current_user.email %></strong>.
    <%= link_to "Settings", edit_user_registration_path %> |
    <%= link_to "Logout", destroy_user_session_path, method: :delete %>
  <% else %>
    <%= link_to "Sign up", new_user_registration_path, :class => 'navbar-link' %> |
    <%= link_to "Login", new_user_session_path, :class => 'navbar-link' %>
  <% end %>
  <p class="notice"><%= notice %></p>
  <p class="alert"><%= alert %></p>
  <%= yield %>
</body>

Spalte zum Benutzermodell hinzufügen

string


$ rails db:migrate

Spalte "Name" zum Anmeldebildschirm hinzugefügt

app/views/devise/registrations/new.html.erb


<div class="field">
  <%= f.label :name %><br />
  <%= f.text_field :name %>
</div>

Spalte "Name" zum Bildschirm zum Ändern von Benutzerinformationen hinzugefügt

app/views/devise/registrations/edit.html.erb


<div class="field">
  <%= f.label :name %><br />
  <%= f.text_field :name %>
</div>

Ändern Sie den Benutzernamen des Benutzermodells

Speichern Sie die Namensspalte im Controller

app/controllers/application_controller.rb


before_action :configure_permitted_parameters, if: :devise_controller?

protected

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
  devise_parameter_sanitizer.permit(:account_update, keys: [:name])
end

Anzeigen des Benutzernamens in den Anmeldeinformationen der Navigation

app/views/layouts/application.html.erb


<% if user_signed_in? %>
  Logged in as <strong><%= current_user.name %></strong>.
  <%= link_to "Settings", edit_user_registration_path, :class => "navbar-link" %> |
  <%= link_to "Logout", destroy_user_session_path, method: :delete, :class => "navbar-link" %>
<% else %>
  <%= link_to "Sign up", new_user_registration_path, :class => 'navbar-link' %> |
  <%= link_to "Login", new_user_session_path, :class => 'navbar-link' %>
<% end %>

Anzeigenamensspalte in der Beitragsliste

views/articles/index.erb.html


<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Content</th>
      <th colspan="3"></th>
    </tr>
  </thead>

  <tbody>
    <% @articles.each do |article| %>
      <tr>
        <td><%= article.user.name %></td>
        <td><%= article.content %></td>
        <td><%= link_to 'Show', article %></td>
        <td><%= link_to 'Edit', edit_article_path(article) %></td>
        <td><%= link_to 'Destroy', article, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>

Zeigen Sie die Namensspalte auf dem Bildschirm mit den Beitragsdetails an

views/articles/show.erb.html


<p>
  <strong>User:</strong>
  <%= @article.user.name %>
</p>

Ändern Sie das neue Beitragsformular und entfernen Sie user_id

app/views/articles/_form.html.erb


<%= form_with(model: article, local: true) do |form| %>
  <% if article.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(article.errors.count, "error") %> prohibited this article from being saved:</h2>

      <ul>
      <% article.errors.full_messages.each do |message| %>
        <li><%= message %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= form.label :content %>
    <%= form.text_field :content, id: :article_content %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

Ändern Sie die Erstellungsmethode

app/controllers/articles_controller.rb


# POST /articles
# POST /articles.json
def create
  @article = Article.new(article_params)
  @article.user_id = current_user.id

Aktualisierungsmethode ändern

app/controllers/articles_controller.rb


def update
    if @article.user_id == current_user.id
      respond_to do |format|
        if @article.update(article_params)
          format.html { redirect_to @article, notice: 'Article was successfully updated.' }
          format.json { render :show, status: :ok, location: @article }
        else
          format.html { render :edit }
          format.json { render json: @article.errors, status: :unprocessable_entity }
        end
      end
    else
        redirect_to @article, notice: "You don't have permission."
    end
end

Zerstörungsmethode ändern

app/controllers/articles_controller.rb


def destroy
  if @article.user_id == current_user.id
    @article.destroy
    msg = "Article was successfully destroyed."
  else
    msg = "You don't have permission."
  end
  respond_to do |format|
    format.html { redirect_to articles_url, notice: msg }
    format.json { head :no_content }
  end
end

Update-Aktion korrigieren

app/controllers/articles_controller.rb


def update
    if @article.user_id == current_user.id
      respond_to do |format|
        if @article.update(article_params)
          format.html { redirect_to @article, notice: 'Article was successfully updated.' }
          format.json { render :show, status: :ok, location: @article }
        else
          format.html { render :edit }
          format.json { render json: @article.errors, status: :unprocessable_entity }
        end
      end
    else
        redirect_to @article, notice: "You don't have permission."
    end
end

Ändern Sie die Zerstörungsaktion

app/controllers/articles_controller.rb


def destroy
  if @article.user_id == current_user.id
    @article.destroy
    msg = "Article was successfully destroyed."
  else
    msg = "You don't have permission."
  end
  respond_to do |format|
    format.html { redirect_to articles_url, notice: msg }
    format.json { head :no_content }
  end
end

Beitragsliste anzeigen

app/views/articles/index.html.erb


<% if user_signed_in? && article.user_id == current_user.id %>
    <td><%= link_to 'Edit', edit_article_path(article) %></td>
    <td><%= link_to 'Destroy', article, method: :delete, data: { confirm: 'Are you sure?' } %></td>
<% end %>

Ändern Sie den Detailbildschirm

app/views/articles/show.html.erb


<% if user_signed_in? && @article.user_id == current_user.id %>
    <%= link_to 'Edit', edit_article_path(@article) %> |
<% end %>
<%= link_to 'Back', articles_path %>

Recommended Posts

Ruby on Rails Lernrekord -2020.10.04
Ruby on Rails Lernrekord -2020.10.05
Ruby on Rails Lernrekord -2020.10.09
Ruby on Rails lernen Rekord-2020.10.07 ②
Ruby on Rails lernen Rekord-2020.10.07 ①
Ruby on Rails Lernrekord -2020.10.06
Ruby on Rails Elementary
Ruby on Rails Grundlagen
[Ruby on Rails] Informationen zum Active Record-Rückruf
Ruby On Rails Association
Portfolioerstellung Ruby on Rails
[Ruby on Rails] Debuck (bindend.pry)
Brechen Sie die Ruby on Rails-Migration ab
Zusammenfassung der Ruby on Rails-Validierung
Ruby on Rails Grundlegendes Memorandum
Rubin lernen 4
Ruby on Rails5 - Schnellübungshandbuch 5.2 Kompatibel Kapitel2
Ruby lernen 3
Ruby lernen 2
Ruby on Rails5 - Schnellübungshandbuch 5.2 Kompatibel Kapitel3
Rubin lernen 6
Rubin lernen 1
[Ruby on Rails] Leseversuch (: [],: Schlüssel)
Installation von Ruby + Rails unter Ubuntu 18.04 (rbenv)
[Ruby on Rails] Paging-Funktion eingeführt
Grundkenntnisse in Ruby on Rails
Progate Ruby on Rails5 Rückblick
Verwendung von Ruby on Rails
Ruby on Rails Japanisch-Englisch kompatibler i18n
(Ruby on Rails6) Gepostete Inhalte "löschen"
[Ruby on Rails] CSV-Ausgabefunktion
Ruby on Rails 6.0-Umgebungskonstruktionsnotiz
[Ruby on Rails] Erstellung der Bestätigungsseite
Ruby On Rails entwickelt Routing-Konflikte
[Ruby on Rails] Implementierung der Kommentarfunktion
[Ruby on Rails] DM, Chat-Funktion
[Ruby on Rails] Praktische Hilfsmethode
[Ruby on Rails] Stoppen Sie "Looping bis ..."
Ruby on Rails-Datensatzsuche, erstellen Sie die Methode find_or_create_by, wenn nicht
[Ruby on Rails] Einführung der Anfangsdaten
[Ruby on Rails] Suchfunktion (nicht ausgewählt)
[Rails] Hinzufügen der Ruby On Rails-Kommentarfunktion
[Ruby on Rails] Erstellen eines Anfrageformulars
Ruby on Rails6 Praktischer Leitfaden cp13 ~ cp15 [Memo]
[Ruby on Rails] Test mit RSpec anzeigen
[Ruby on Rails] Codeprüfung mit Rubocop-Airbnb
[Ruby on Rails] 1 Modell CRUD (Routing Main)
Ruby on Rails-Installationsmethode [Mac Edition]
Modell [Ruby on Rails], Befehl für Controller-Terminal
Befehl zum Erstellen / Löschen von Ruby on Rails-Modellen