[RUBY] [Rails] Implementierung der Kategoriefunktion

Ziel

ezgif.com-video-to-gif.gif

Entwicklungsumgebung

・ Ruby: 2.5.7 Schienen: 5.2.4 ・ Vagrant: 2.2.7 -VirtualBox: 6.1 ・ Betriebssystem: macOS Catalina

Annahme

Folgendes wurde implementiert.

Schlanke EinführungEinführung von Bootstrap 3Implementierung der Posting-Funktion

Implementierung

1. Modell

** ① Erstellen Sie eine Kategoriemodelltabelle **

Terminal


$ rails g model Category name:string

Terminal


$ rails db:migrate

schema.rb


create_table "categories", force: :cascade do |t|
  t.string "name"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

** ② Fügen Sie der Büchertabelle eine Spalte hinzu **

Terminal


$ rails g migration AddCategoryIdToBooks category_id:integer

Terminal


$ rails db:migrate

schema.rb


  create_table "books", force: :cascade do |t|
    t.integer "user_id"
    t.string "title"
    t.text "body"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "category_id"
  end

** ③ Jedes Modell bearbeiten **

book.rb


#Nachtrag
has_many :categories, dependent: :destroy

dependent: :destroy ➡︎ Wenn die entsprechende Kategorie gelöscht wird, wird auch das verknüpfte Buch gelöscht.

category.rb


#Nachtrag
belongs_to :book

2. Controller

** ① Erstelle und bearbeite category_controller.rb **

Erstellen Sie einen Index und bearbeiten Sie die Ansichten im Voraus.

Terminal


$ rails g controller categories index edit

categories_controller.rb


class CategoriesController < ApplicationController
  before_action :set_category, only: [:edit, :update, :destroy]

  def index
    @category = Category.new
    @categories = Category.all
  end

  def create
    @category = Category.new(category_params)
    if @category.save
      redirect_to categories_path
    else
      @categories = Category.all
      render 'index'
    end
  end

  def edit
  end

  def update
    if @category.update(category_params)
      redirect_to categories_path
    else
      render 'edit'
    end
  end

  def destroy
    @category.destroy
    redirect_to categories_path
  end

  private

    def set_category
      @category = Category.find(params[:id])
    end

    def category_params
      params.require(:category).permit(:name)
    end
end

** ② Füge category_id zum starken Parameter von books_controller.rb hinzu **

books_controller.rb


def book_params
  params.require(:book).permit(:title, :body, :category_id)
end

3. Routing

routes.rb


#Nachtrag
resources :categories, except: [:new, :show]

except: [:new, :show] ➡︎ Fügen Sie andere als neue Aktionen hinzu und zeigen Sie sie dem Routing an.

4. Anzeigen

slim:categories/index.html.slim


.row

  .col-xs-3
    = form_with model: @category, local: true do |f|

      = f.label :name, 'Kategoriename'
      br
      = f.text_field :name, class:'form-control'
      br

      = f.submit 'hinzufügen', class: 'btn btn-primary btn-block'

  .col-xs-9
    table.table
      thead
        tr
          th
            |Kategoriename
          th
          th

      tbody
        - @categories.each do |category|
          tr
            td
              = category.name
            td
              = link_to 'Bearbeiten', edit_category_path(category), class: 'btn-sm btn-primary'
            td
              = link_to 'Löschen', category_path(category), method: :delete, data: { confirm: '本当にLöschenしますか?' }, class: 'btn-sm btn-danger'

slim:categories/edit.html.slim


.row
  .col-xs-3

  .col-xs-6
    = form_with model: @category, local: true do |f|

      = f.label :name, 'Kategoriename'
      br
      = f.text_field :name, class:'form-control'
      br

      = f.submit 'sparen', class: 'btn btn-primary btn-block'

  .col-xs-3

slim:books/index.html.slim


.row
  .col-xs-3
    = form_with model: @book, local: true do |f|

      = f.label :title, 'Titel'
      br
      = f.text_field :title, class:'form-control'
      br

      = f.label :body, 'Text'
      br
      = f.text_area :body, class:'form-control'
      br

      /Nachtrag
      = f.label :category_id, 'Kategorie'
      br
      = f.collection_select :category_id, Category.all, :id, :name, { prompt: 'Bitte auswählen' }, class: 'form-control'
      br

      = f.submit 'Post', class: 'btn btn-primary btn-block'

  .col-xs-9
    table.table
      thead
        tr
          th
            |Mitwirkender
          th
            |Titel
          th
            |Text
          /Nachtrag
          th
            |Kategorie
          th

      tbody
        - @books.each do |book|
          tr
            td
              = link_to book.user  do
                = book.user.name
            td
              = link_to book.title, book_path(book)
            td
              = book.body
            /Nachtrag
            td
              = book.category.name
            td
              -if book.user == current_user
                = link_to 'Löschen', book, method: :delete, data: { confirm: '本当にLöschenしてもよろしいですか?' }, class: 'btn-sm btn-danger'

= f.collection_select :category_id, Category.all, :id, :name ➡︎ Der Name aller Kategorien wird im Pulldown-Menü angezeigt und der Wert auf id gesetzt.

Recommended Posts

[Rails] Implementierung der Kategoriefunktion
Implementierung der Kategorie-Pulldown-Funktion
[Rails] Implementierung der Tutorial-Funktion
[Rails] Implementierung einer ähnlichen Funktion
[Schienen] Kategoriefunktion
[Rails] Implementierung der CSV-Importfunktion
[Rails] Asynchrone Implementierung der Like-Funktion
[Rails] Implementierung der Bildvorschau
[Rails] Implementierung der Benutzerrückzugsfunktion
[Rails] Implementierung der CSV-Exportfunktion
[Rails] Implementierung von Viele-zu-Viele-Kategoriefunktionen
Implementierung der Funktionsfunktion [Rails] gem ancestry category
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Vorbereitung"
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der "Seed Edition" der Vorfahren
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Edit Form Edition"
[Rails] Implementierung einer mehrschichtigen Kategoriefunktion unter Verwendung der Abstammung "Erstellungsformular"
Rails [Für Anfänger] Implementierung der Kommentarfunktion
Implementierung der Pagenationsfunktion
[Ruby on Rails] Implementierung einer ähnlichen Funktion
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
Implementierung der Ruby on Rails-Anmeldefunktion (Sitzung)
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
Implementierung der Ajax-Entfernung in Rails
Implementierung der Fuzzy-Suchfunktion für Schienen
Implementierung der sequentiellen Suchfunktion
Implementierung einer ähnlichen Funktion (Ajax)
Implementierung der Bildvorschau
[Rails] Implementierung der Drag & Drop-Funktion (mit Wirkung)
Implementierung der Ruby on Rails-Anmeldefunktion (Devise Edition)
[Rails] Implementierung des logischen Löschens durch den Benutzer
[Ruby on Rails] Implementierung der Kommentarfunktion
[Rails] Memo zur Implementierung der Kommentarfunktion
Implementierung einer ähnlichen Funktion in Java
Implementierung der Rails-Sortierfunktion (angezeigt in der Reihenfolge der Anzahl der Gleichen)
[Rails] Implementierung einer neuen Registrierungsfunktion im Assistentenformat mit devise
[Rails] Hinzufügen der Ruby On Rails-Kommentarfunktion
Implementierung der Benutzerauthentifizierungsfunktion mit devise (2)
Implementierung der DM-Funktion
Schienen Hinzufügen einer einfachen Anmeldefunktion
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
[Rails] Implementierung der Couponfunktion (mit automatischer Löschfunktion mittels Stapelverarbeitung)
Schienen folgen der Funktion
Rails Grundgerüst für die Implementierung der CRUD-Funktion
Implementierung der Benutzerauthentifizierungsfunktion mit devise (3)
[Rails] Implementierung der Tag-Funktion mit Acts-as-Taggable-On und der Funktion zur Vervollständigung der Tag-Eingabe mit Tag-It