ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
Erstellen einer Namensanmeldeumgebung mit Gerät Der Controller-Name lautet post (diesmal nur die post-Funktion)
Terminal
$ rails g model Post user:references title:string body:string
Bei der Ausführung wird wie folgt vorgegangen, eine Spalte wird hinzugefügt und kann gespeichert werden.
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
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: :zerstören ← Hier hinzufügen
end
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) #Geben Sie an, was neu gespeichert werden soll
@post.user_id = current_user.id #Geben Sie an, wer gepostet hat
if @post.save #Wenn Sie speichern können
redirect_to new_post_path #Übergang zum Buchungsbildschirm
else #Wenn du nicht kannst
render :new #Übergang zu neu
end
end
def new
@post = Post.new
@posts = Post.all
end
private #Starker Parameter (eine Funktion, um Schwachstellen zu verhindern, die unerwartete Werte ändern)
def post_params
params.require(:post).permit(:title, :body) #Titel- und Textänderungen zulassen
end
end
Geändert wie unten.
config/routes.rb
get 'posts/create'← Löschen
get 'posts/new'← Löschen
resources :posts, only: [:create, :new]← Hinzufügen
↓ Nach dem Wechsel
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]← Hinzufügen
end
Klicken Sie mit der rechten Maustaste und löschen Sie app / views / posts / create.html.erb.
erb:app/views/posts/new.html.erb
<h1>Posts#new</h1>
<span>Derzeit angemeldeter Benutzer:<%= current_user.name %></span>
<%= form_for(@post, url: posts_path) do |f| %>
<div>
<%= f.label :Titel%><br>
<%= f.text_field :title, autofocus: true %>
</div>
<div>
<%= f.label :Inhalt%><br>
<%= f.text_area :body %>
</div>
<div><%= f.submit "Post" %></div>
<% end %>
<table>
<thead>
<tr>
<th>Gepostet mit Namen</th>
<th>Titel</th>
<th>Text</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>
Recommended Posts