ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
Création d'un environnement de connexion par nom avec un appareil Le nom du contrôleur est post (uniquement la fonction post cette fois)
Terminal
$ rails g model Post user:references title:string body:string
Une fois exécuté, ce sera comme suit, une colonne sera ajoutée et elle pourra être enregistrée.
db/migrate/xxxxxxxxxxxxx_create_posts.rb
class CreatePosts < ActiveRecord::Migration[5.2]
def change
create_table :posts do |t|
t.references :user, foreign_key: true
t.string :title
t.string :body
t.timestamps
end
end
end
<détails>
Terminal
$ rails db:migrate
app/models/post.rb
class Post < ApplicationRecord
belongs_to :user
end
app/models/user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :posts, dependent: :détruire ← Ajouter ici
end
<détails> <résumé> Explication </ résumé> En fonction de l'utilisateur: références lors de la création du contrôleur Du côté de l'article, appartient_to: l'utilisateur est décrit, et 1 article 1 article peut enregistrer qui est l'article. En ajoutant has_many: posts, depend :: destroy du côté utilisateur Vous pouvez créer une relation un-à-plusieurs et un utilisateur peut publier plusieurs publications.
Terminal
$ rails g controller posts create new
app/controllers/posts_controller.rb
class PostsController < ApplicationController
before_action :authenticate_user!
def create
@post = Post.new(post_params) #Spécifiez ce que vous souhaitez enregistrer récemment
@post.user_id = current_user.id #Précisez qui a publié
if @post.save #Si vous pouvez économiser
redirect_to new_post_path #Transition vers l'écran de publication
else #Si tu ne peux pas
render :new #Transition vers nouveau
end
end
def new
@post = Post.new
@posts = Post.all
end
private #Paramètre fort (une fonction pour éviter les vulnérabilités qui modifient des valeurs inattendues)
def post_params
params.require(:post).permit(:title, :body) #Autoriser les changements de titre et de corps
end
end
<détails>
Modifié comme ci-dessous.
config/routes.rb
get 'posts/create'← Supprimer
get 'posts/new'← Supprimer
resources :posts, only: [:create, :new]← Ajouter
↓ Après le changement
config/routes.rb
Rails.application.routes.draw do
devise_for :users, controllers: {
sessions: 'users/sessions',
registrations: 'users/registrations',
}
root 'homes#top'
get 'mypage', to: 'homes#mypage'
resources :posts, only: [:create, :new]← Ajouter
end
<détails>
Cliquez avec le bouton droit de la souris et supprimez app / views / posts / create.html.erb.
erb:app/views/posts/new.html.erb
<h1>Posts#new</h1>
<span>Utilisateur actuellement connecté:<%= current_user.name %></span>![Enregistrement d'écran 2020-09-01 22.17.23.mov.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/700999/512682b6-24c4-0a5b-fc87-35fc7806c02f.gif)
<%= form_for(@post, url: posts_path) do |f| %>
<div>
<%= f.label :Titre%><br>
<%= f.text_field :title, autofocus: true %>
</div>
<div>
<%= f.label :Contenu%><br>
<%= f.text_area :body %>
</div>
<div><%= f.submit "Publier" %></div>
<% end %>
<table>
<thead>
<tr>
<th>Publié par nom</th>
<th>Titre</th>
<th>Texte</th>
</tr>
</thead>
<tbody>
<% @posts.each do |post| %>
<tr>
<td><%= post.user.name %></td>
<td><%= post.title %></td>
<td><%= post.body %></td>
</tr>
<% end %>
</tbody>
</table>
<détails>
Recommended Posts