[RUBY] Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]

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.

Version

Ruby 2.5 Rails 5.1

DB / préparation

C'est un design avec de nombreux fils liés à la catégorie スクリーンショット 2020-07-09 12.08.06.png

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

Tout d'abord, enregistrez la catégorie

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

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

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

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

J'aimerais pouvoir afficher ceci pour le moment

index.rb


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

Créer un formulaire de soumission de fil

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

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

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.

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

en conclusion

Merci d'avoir regardé jusqu'à la fin. J'écrirai désormais beaucoup d'articles et j'en sortirai de plus en plus.

Recommended Posts

Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
Comment créer un formulaire pour sélectionner une date dans le calendrier
Je veux donner un nom de classe à l'attribut select
[Rails] Je souhaite envoyer des données de différents modèles dans un formulaire
Je veux utiliser une petite icône dans Rails
Je souhaite définir une fonction dans la console Rails
Je souhaite créer une annotation générique pour un type
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
Préparation à la création de l'application Rails
[Rails] [bootstrap] Je souhaite modifier la taille de la police de manière réactive
[Rails] J'ai essayé de créer une mini application avec FullCalendar
Je veux appeler une méthode et compter le nombre
Je veux créer un fichier Parquet même en Ruby
[Rails] Je souhaite afficher la destination du lien de link_to dans un onglet séparé
[Rails 6.0, Docker] J'ai essayé de résumer la construction de l'environnement Docker et les commandes nécessaires pour créer un portfolio
Je souhaite ajouter une fonction de navigation avec ruby on rails
[Rails 6] Comment créer un écran de saisie de formulaire dynamique à l'aide de cocoon
(Ruby on Rails6) Créer une fonction pour modifier le contenu publié
Je souhaite développer une application web!
Je veux écrire un joli build.gradle
Je veux écrire un test unitaire!
[rails] Comment créer un modèle partiel
[Rails] J'ai découvert les fichiers de migration! (Ajout d'une colonne au tableau)
Je souhaite sélectionner plusieurs éléments avec une disposition personnalisée dans la boîte de dialogue
Je souhaite créer un SNS Web sombre avec Jakarta EE 8 avec Java 11
[Rails] Comment créer une table, ajouter une colonne et changer le type de colonne
Je veux introduire un comité avec des rails sans devenir trop sale
[Pour les débutants] Je souhaite saisir automatiquement des données pré-enregistrées dans le formulaire de saisie avec une commande de sélection.
[Rails] Comment créer un graphique à l'aide de lazy_high_charts
[Rails] J'ai essayé de faire passer la version de Rails de 5.0 à 5.2
Je veux écrire une simple répétition d'une chaîne de caractères
J'ai essayé de créer une application de clonage LINE
Code utilisé pour connecter Rails 3 à PostgreSQL 10
Je souhaite concevoir une structure pour la gestion des exceptions
Comment créer facilement un pull-down avec des rails
Je veux jouer avec Firestore de Rails
[Rails] Comment créer un bouton de partage Twitter
Je veux tronquer après la virgule décimale
[Rails] Je veux charger du CSS avec webpacker
Je veux obtenir la valeur en Ruby
Je souhaite importer les éléments du menu déroulant lors de la soumission d'un formulaire dans Rails en CSV et les afficher à partir des données de la base de données.
[Android] Je souhaite créer un ViewPager pouvant être utilisé pour les didacticiels
[Rails / ActiveRecord] Je souhaite valider la valeur avant la conversion du type (_before_type_cast)
Je souhaite pouvoir lire des fichiers en utilisant refile avec administrate [rails6]
Un mémo pour créer un formulaire simple en utilisant uniquement HTML et CSS dans Rails 6
Je souhaite créer l'environnement de développement local le plus solide à l'aide de conteneurs distants VSCode
Rails6 Je veux créer un tableau de valeurs avec une case à cocher
Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
[Introduction] Créer une application Ruby on Rails
3. Créez une base de données à laquelle accéder à partir du module Web
Je veux appeler une méthode d'une autre classe
[Java] Je souhaite calculer la différence par rapport à la date
Je veux intégrer n'importe quel TraceId dans le journal
Je veux juger la gamme en utilisant le diplôme mensuel