[RUBY] Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen

Hallo. Ich mache gerade ein Schwarzes Brett mit Rails.

Ich wollte die Threads im Bulletin Board nach Kategorien klassifizieren und anzeigen, daher habe ich sie mit der Absicht implementiert, die Kategorie beim Erstellen von Threads auszuwählen.

Ich habe kürzlich angefangen, Rails zu berühren. Wenn Sie damit vertraut sind, fragen Sie bitte Masakari.

Ausführung

Ruby 2.5 Rails 5.1

DB / Vorbereitung

Es ist ein Design mit vielen Threads, die mit der Kategorie verknüpft sind スクリーンショット 2020-07-09 12.08.06.png

Vergessen Sie nicht, zwischen den Modellen zu wechseln ...

thread.rb


class Thread < ApplicationRecord
	belongs_to :category
end

category.rb


class Category < ApplicationRecord
	has_many :threads
end

Registrieren Sie zunächst die Kategorie

Es wird nicht ohne Kategorie beginnen, also lasst uns registrieren. Sie können es über die Konsole verwenden, aber ich denke, ich werde in Zukunft weitere Kategorien hinzufügen, sodass ich ein Registrierungsformular erstellen werde. Nach der Registrierung werden Sie zur Listenseite weitergeleitet.

Schreiben Sie zuerst Routen und Controller

--Routing

routes.rb


Rails.application.routes.draw do
  root 'thread#index'
  resources :thread #Ich schreibe auch Thread-Routing
  resources :categories
end

--Regler

ruby:categories.controller.rb


class CategoriesController < ApplicationController
	def new
		@category = Category.new
	end

	def create
		@category = Category.new(category_params)
		if @category.save
			redirect_to categories_path, notice: "Hat sich registriert"
		else
			render :new
		end
	end

	def index
		@categories = Category.all
	end

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

スクリーンショット 2020-07-09 12.26.28.png

ruby:new.html.erb


<div class="col-sm-12">
	<h2 class="text-center">Kategorie hinzufügen</h2>
	<%= form_with model: @category, local: true do |f| %>
		<div class="form_input">
			<%= f.label :name %>
			<%= f.text_field :name, class:"form-control" %>
		</div>
		<div class="form_action row">
			<%= f.submit "zu registrieren", class: "btn col-sm-12 submit_btn" %>
		</div>
	<% end %>
</div>

--Listenseite

スクリーンショット 2020-07-09 12.28.24.png

Ich wünschte, ich könnte dies vorerst anzeigen

index.rb


<div>
	<% @categories.each do |category| %>
		<%= category.name %>
	<% end %>
</div>

Erstellen Sie ein Thread-Übermittlungsformular

Nachdem Sie sich registriert haben, können Sie im Post-Formular des Threads eine Kategorie auswählen.

--Regler

threads_controller.rb


class ThreadsController < ApplicationController
  def new
    @thread = Thread.new
  end

  def create
    @Thread = Thread.new(board_params)
    if @thread.save
      redirect_to thread_path(@thread), notice: "Beitrag wurde abgeschlossen"
    else
      render :new
    end
  end

  def show
    @thread = Thread.find(params[:id])
  end

  private
  def board_params
    params.require(:thread).permit(:title,:body)
  end
end

--Posting-Seite

スクリーンショット 2020-07-09 12.36.23.png

Sie können ein Auswahlformular mit collection_select erstellen.

Wie man es benutzt, ich benutze es so ... collection_select (Objektname, Methodenname, Array von Elementen, Wertattributelement, Textelement [, Option oder HTML-Attribut oder Ereignisattribut])

In diesem Beispiel entspricht "Category.all" dem Teil "Array of Elements". Anstatt "Category.all" zu schreiben, fügen Sie es möglicherweise in eine Variable auf dem Controller ein und verwenden Sie es in der Ansicht. Es kann besser sein, eine solche Form zu haben.

Es wäre hilfreich, wenn hier jemand darauf hinweisen könnte.

ruby:threads/new.index.erb


<div class="col-sm-12">
	<h2 class="text-center">Steh einen Faden auf</h2>
	<%= form_with model: @thread, local: true do |f| %>
		<div class="form_input">
			<%= f.label :title %>
			<%= f.text_field :title, class: "form-control" %>
		</div>
		<div class="form_input">
			<%= f.label :body %>
			<%= f.text_area :body, class: "form-control" %>
		</div>
		<div class="form_input">
			<%= f.label :category_id %>
			<%= f.collection_select :category_id, Category.all, :id, :name,
															:include_blank => "Bitte wählen sie eine Kategorie" %>
		</div>
		<div class="form_action row">
			<%= f.submit "Post", class: "btn col-sm-12 submit_btn" %>
		</div>
	<% end %>
</div>

Sie können Folgendes auswählen.

スクリーンショット 2020-07-09 12.37.45.png

abschließend

Danke, dass du bis zum Ende zugesehen hast. Ich werde von nun an viele Artikel schreiben und immer mehr ausgeben.

Recommended Posts

Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
So erstellen Sie ein Formular zur Auswahl eines Datums aus dem Kalender
Ich möchte dem select-Attribut einen Klassennamen geben
[Rails] Ich möchte Daten verschiedener Modelle in einem Formular senden
Ich möchte ein kleines Symbol in Rails verwenden
Ich möchte eine Funktion in der Rails Console definieren
Ich möchte eine generische Anmerkung für einen Typ erstellen
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Vorbereiten der Erstellung einer Rails-Anwendung
[Rails] [Bootstrap] Ich möchte die Schriftgröße entsprechend ändern
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich möchte eine Parkettdatei auch in Ruby erstellen
[Rails] Ich möchte das Linkziel von link_to auf einer separaten Registerkarte anzeigen
[Rails 6.0, Docker] Ich habe versucht, die Konstruktion der Docker-Umgebung und die zum Erstellen eines Portfolios erforderlichen Befehle zusammenzufassen
Ich möchte eine Browsing-Funktion mit Ruby on Rails hinzufügen
[Rails 6] So erstellen Sie mit cocoon einen dynamischen Formular-Eingabebildschirm
(Ruby on Rails6) Erstellen Sie eine Funktion zum Bearbeiten des veröffentlichten Inhalts
Ich möchte eine Webanwendung entwickeln!
Ich möchte ein schönes build.gradle schreiben
Ich möchte einen Unit Test schreiben!
[Rails] So erstellen Sie eine Teilvorlage
[Rails] Ich habe etwas über Migrationsdateien gelernt! (Hinzufügen einer Spalte zur Tabelle)
Ich möchte im Dialogfeld mehrere Elemente mit einem benutzerdefinierten Layout auswählen
Ich möchte mit Jakarta EE 8 mit Java 11 ein dunkles Web-SNS erstellen
[Schienen] So erstellen Sie eine Tabelle, fügen eine Spalte hinzu und ändern den Spaltentyp
Ich möchte ein Komitee mit Rails vorstellen, ohne zu schmutzig zu werden
[Für Anfänger] Ich möchte mit einem Auswahlbefehl automatisch vorregistrierte Daten in das Eingabeformular eingeben.
[Rails] So erstellen Sie ein Diagramm mit lazy_high_charts
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
Ich habe versucht, eine LINE-Klon-App zu erstellen
Code zum Verbinden von Rails 3 mit PostgreSQL 10
Ich möchte eine Struktur für die Ausnahmebehandlung entwerfen
So erstellen Sie einfach ein Pulldown mit Rails
Ich möchte mit Firestore von Rails spielen
[Rails] So erstellen Sie eine Twitter-Freigabeschaltfläche
Ich möchte nach dem Dezimalpunkt abschneiden
[Rails] Ich möchte CSS mit Webpacker laden
Ich möchte den Wert in Ruby erhalten
Ich möchte die Pulldown-Menüelemente beim Senden eines Formulars in Rails in CSV importieren und aus den DB-Daten anzeigen.
[Android] Ich möchte einen ViewPager erstellen, der für Tutorials verwendet werden kann
[Rails / ActiveRecord] Ich möchte den Wert überprüfen, bevor der Typ konvertiert wird (_before_type_cast).
Ich möchte in der Lage sein, Dateien mit refile mit administrate [rails6] zu lesen.
Ein Memo zum Erstellen eines einfachen Formulars, das nur HTML und CSS in Rails 6 verwendet
Ich möchte die stärkste lokale Entwicklungsumgebung mit VSCode Remote Containers erstellen
Rails6 Ich möchte ein Array von Werten mit einem Kontrollkästchen erstellen
Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
[Einführung] Erstellen Sie eine Ruby on Rails-Anwendung
3. Erstellen Sie eine Datenbank für den Zugriff über das Webmodul
Ich möchte eine Methode einer anderen Klasse aufrufen
[Java] Ich möchte die Differenz zum Datum berechnen
Ich möchte eine TraceId in das Protokoll einbetten
Ich möchte den Bereich anhand des monatlichen Abschlusses beurteilen