(Ruby on Rails6) Créer une fonction pour modifier le contenu publié

Préface

Ici, le travail de "modification du contenu publié" est laissé comme un enregistrement oublié dans l'hypothèse où la page publiée a été créée.

Créer une fonction pour modifier le contenu publié

Créer une page d'édition

Créez une nouvelle page d'édition à 3 points: routes, contrôleurs et vue. Aussi, pour la création de page

・ Nom du contrôleur → formulaire ・ Nom de l'action → Modifier

Il est défini avec.

(Exemple)

config/routes


Rails.application.routes.draw do
  get '/' => 'form#index'
  get '/form' => 'form#form'
  post "form/create" => "form#create"
  get "form/:id/edit" => "form#edit"⇦ Ce
  get "form/:id" => "form#post"
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end

erb:app/views/Tout.html.erb


<h1>Modifier la page</h1>

rb:app/controllers/Tout.controller.rb


class FormController < ApplicationController
  def index
    @forms = Form.all
    @forms = Form.all.order(created_at: :desc)
  end
  def post
    @forms = Form.find_by(id: params[:id])
  end
  def form
    @forms = Form.find_by(id: params[:id])
  end
  def create
    @forms = Form.new(content: params[:content])
    @forms.save 
    @forms = Form.new(title: params[:title])
    @forms.save 
    redirect_to("/")
  end

def modifier ← d'ici
   
fin ← jusqu'ici
end

Le post </ strong> des itinéraires est utilisé lors de la récupération des données du formulaire. Veuillez définir avec get </ strong> lors de la création d'une nouvelle page. Cela provoquera une erreur.

Réglage de la valeur initiale sur la page d'édition (zone de texte / entrée)

controllers

rb:app/views/Tout.html.erb


・
・
・
def edit
    @forms = Form.find_by(id: params[:id])← ici
end

Définissez @forms = Form.find_by (id: params [: id]) </ strong> dans l'action de modification pour obtenir les données avec le même identifiant que l'URL.

views

erb:app/views/Tout.html.erb


<h1>Modifier la page</h1>
<div class="form">
  <div>
    <textarea><%= @forms.content %></textarea>← ici
    <input type="submit" value="sauvegarder"> </div>
</div>

<% = @ forms.content%> </ strong> définit la valeur initiale de l'entrée.

Enregistrer les modifications

Ajouter une action au contrôleur

Vous recevrez la valeur du formulaire, donc dans les routes, vous devriez le faire avec post </ strong> au lieu de get.

config/routes.rb


post "form/:id/new" => "form#new"

Rediriger les paramètres

Lorsque vous êtes prêt à recevoir la valeur du formulaire pour l'action, vous devez rediriger </ strong> après avoir appuyé sur Envoyer.

rb:app/views/Tout.controllers.rb


def new
    redirect_to("/")
end

Utilisez redirect_to ("/") </ strong> pour définir la redirection. / </ strong> est défini par moi, veuillez donc l'organiser individuellement.

Spécifiez la destination dans Vues

J'ai obtenu la valeur du formulaire et je l'ai redirigé plus tôt. Ici, spécifiez la destination dans Vues.

erb:app/views/Tout.controllers.erb


<h1>Modifier la page</h1>
<%= form_tag("/posts/#{@post.id}/new") do %>← ici
<div class="form">
  <div>
    <textarea><%= @forms.title %></textarea> 
    <textarea><%= @forms.content %></textarea> 
    <input type="submit" value="sauvegarder"> </div>
</div>
<% end %>← ici

↓ Détails

erb:app/views/Tout.html.erb


<%= form_tag("/posts/#{@post.id}/new") do %>
Balise de formulaire
<% end %>

La destination est spécifiée par ↑.

Mettre à jour le contenu publié

J'ai besoin d'obtenir les données de la base de données. L'action d'acquisition peut être effectuée en ajoutant l'attribut de nom d'action, alors exécutons-la.

Spécifiez l'attribut de nom dans View

erb:app/views/Tout.html.erb


<h1>Modifier la page</h1>
<%= form_tag("/posts/#{@post.id}/new") do %>
<div class="form">
  <div>
    <textarea name="content"><%= @forms.content %></textarea>← ici
    <input type="submit" value="sauvegarder"> </div>
</div>
<% end %>

Spécifié par les paramètres et enregistrer sur le contrôleur

params </ strong> vous permet de créer un objet pour contenir les données envoyées.

rb:app/controllers/Tout.controller.rb


def update
    @forms = Form.find_by(id: params[:id])
    @forms.content = params[:content]
    @forms.save
    
    redirect_to("/")
  end

Épilogue

Merci d'avoir lu jusqu'ici. Cela peut prendre un certain temps avant que vous puissiez comprendre le processus tel que la définition de la valeur initiale, mais je voudrais approfondir régulièrement votre compréhension. De plus, étant donné que les détails tels que "lien vers la page de publication" sont omis de l'introduction ici, il est recommandé de définir celui que vous créez vous-même.

Lien de référence

<a href = "https://www.amazon.co.jp/Ruby-Rails-%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83% 89-impress-gear / dp / 4295008052 "target =" blank "> Ruby on Rails6 Guide pratique

Mon lien

De plus, il y a un lien sur Twitter / Portfolio, donc si vous êtes intéressé, Connectez-vous s'il vous plaît. Je serais très heureux d'avoir des amis avec qui je peux partager mon apprentissage de la programmation.

Twitter Portfolio Github

Recommended Posts