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.
Ruby 2.5 Rails 5.1
Es ist ein Design mit vielen Threads, die mit der Kategorie verknüpft sind
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
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
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
Ich wünschte, ich könnte dies vorerst anzeigen
index.rb
<div>
<% @categories.each do |category| %>
<%= category.name %>
<% end %>
</div>
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
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.
Danke, dass du bis zum Ende zugesehen hast. Ich werde von nun an viele Artikel schreiben und immer mehr ausgeben.
Recommended Posts