Bonjour. Je crée actuellement un babillard avec Rails.
Je voulais classer les fils sur le babillard par catégorie et les afficher, donc je l'ai implémenté avec l'intention de sélectionner la catégorie lors de la création de fils.
J'ai commencé à toucher Rails récemment, donc si vous le connaissez, veuillez demander à Masakari.
Ruby 2.5 Rails 5.1
C'est un design avec de nombreux fils liés à la catégorie
N'oubliez pas de définir entre les modèles ...
thread.rb
class Thread < ApplicationRecord
belongs_to :category
end
category.rb
class Category < ApplicationRecord
has_many :threads
end
Cela ne commencera pas sans catégorie, alors inscrivons-nous. Vous pouvez l'utiliser depuis la console, mais je pense que j'ajouterai plus de catégories à l'avenir, donc je vais créer un formulaire d'inscription. Après votre inscription, vous serez redirigé vers la page de liste.
Tout d'abord, écrivez les routes et le contrôleur
--Routage
routes.rb
Rails.application.routes.draw do
root 'thread#index'
resources :thread #J'écris aussi le routage des threads
resources :categories
end
--Manette
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: "S'est inscrit"
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">Ajouter une catégorie</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 "s'inscrire", class: "btn col-sm-12 submit_btn" %>
</div>
<% end %>
</div>
--Page de liste
J'aimerais pouvoir afficher ceci pour le moment
index.rb
<div>
<% @categories.each do |category| %>
<%= category.name %>
<% end %>
</div>
Maintenant que vous vous êtes inscrit, vous pourrez sélectionner une catégorie sur le formulaire de publication du fil.
--Manette
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: "Le message est terminé"
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
--Page de publication
Vous pouvez créer un formulaire de sélection avec collection_select
.
Quant à savoir comment l'utiliser, je l'utilise comme ça ...
collection_select (nom d'objet, nom de méthode, tableau d'éléments, élément d'attribut de valeur, élément de texte [, option ou attribut HTML ou attribut d'événement])
Dans cet exemple, «Category.all» correspond à la partie «tableau d'éléments».
Peut-être, plutôt que d'écrire Category.all
, placez-le dans une variable sur le contrôleur et utilisez-le dans la vue. Il vaut peut-être mieux avoir une forme comme celle-là.
Il serait utile que quelqu'un puisse le signaler ici.
ruby:threads/new.index.erb
<div class="col-sm-12">
<h2 class="text-center">Lève un fil</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 => "Veuillez sélectionner une catégorie" %>
</div>
<div class="form_action row">
<%= f.submit "Publier", class: "btn col-sm-12 submit_btn" %>
</div>
<% end %>
</div>
Vous pourrez sélectionner comme suit.
Merci d'avoir regardé jusqu'à la fin. J'écrirai désormais beaucoup d'articles et j'en sortirai de plus en plus.