Wir haben dem Portfolio, das wir erstellen, die Funktion des Publizierens / privater Artikel hinzugefügt, daher werden wir das Implementierungsverfahren einführen. Ich habe einen Artikel gepostet, aber ich denke, es gibt Zeiten, in denen ich ihn privat halten möchte, also habe ich ihn implementiert.
$ rails g migration Add_status_To_posts status:integur
db/migrate/20201111213454_add_status_to_posts.rb
class AddStatusToPosts < ActiveRecord::Migration[6.0]
def change
add_column :posts, :status, :integer, null: false, default: 0
end
end
app/models/post.rb
class Post < ApplicationRecord
#
enum status: { public: 0, private: 1 }, _prefix: true
#
end
Hinzufügen einer Spalte für den Status zur Beitragstabelle Definieren eines Modells ... Ausgelassen ... Ausgelassen Wenn Sie den Browser öffnen, ohne wie oben beschrieben `_prefix: true``` zu schreiben, wird der folgende Fehler angezeigt. Es war. Bei der Überprüfung der Fehleranweisung wird gesagt, dass die Methode
public``` dupliziert ist. Wenn keine doppelten Fehler vorliegen, müssen Sie kein ``
_prefix: true``` schreiben.
log/development.log
ArgumentError (You tried to define an enum named "status" on the model "Post", but this will generate a class method "public", which is already defined by Active Record.):
app/models/post.rb:19:in `<class:Post>'
app/models/post.rb:1:in `<main>'
app/controllers/posts_controller.rb:85:in `set_post'
Started GET "/posts/3" for 127.0.0.1 at 2020-11-12 06:52:36 +0900
Cannot render console from 172.22.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
[1m[35m (1.2ms)[0m [1m[35mSET NAMES utf8mb4, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483[0m
Processing by PostsController#show as HTML
Parameters: {"id"=>"3"}
Completed 500 Internal Server Error in 27ms (ActiveRecord: 0.0ms | Allocations: 5566)
erb:app/views/posts/_form.html.erb
<%= form_with(model: post, local: true) do |form| %>
<!--···Kürzung···-->
<%= form.label(:public, for: nil, class:'post-status__label') do %>
<%= form.radio_button :status, :public %>
<%= I18n.t('activerecord.attributes.post.statuses.public') %>
<% end %>
<%= form.label(:private, for: nil, class:'post-status__label') do %>
<%= form.radio_button :status, :private %>
<%= I18n.t('activerecord.attributes.post.statuses.private') %>
<% end %>
<!--···Kürzung···-->
<% end %>
Die Benutzeroberfläche für die Auswahl von öffentlich / privat lautet wie folgt. Das Implementierungsverfahren ist nicht das Hauptthema in diesem Artikel, daher werde ich es weglassen. Diese Implementierung dauerte jedoch lange.
app/controllers/posts_controller.rb
class PostsController < ApplicationController
#···Kürzung
def create
@post = Post.new(post_params)
@post.user_id = current_user.id
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Ich habe einen neuen Beitrag gemacht.' }
format.json { render :show, status: :created, location: @post }
else
format.html { render :new }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
#···Kürzung
private
#···Kürzung
def post_params
params.require(:post).permit(
:title,
:content,
:image,
:status, # <=Hinzugefügt: Statusspalte
{:cat_ids => []}
)
end
#···Kürzung
end
app/controllers/posts_controller.rb
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
# GET /posts/1
# GET /posts/1.json
def show
if @post.status_private? && @post.user != current_user
respond_to do |format|
format.html { redirect_to posts_path, notice: 'Auf diese Seite kann nicht zugegriffen werden' }
end
end
#···Kürzung
end
#···Kürzung
private
def set_post
@post = Post.find(params[:id])
end
#···Kürzung
end
#Öffentlicher Artikel
$ Post.status_public.order(created_at: :desc).page(params[:page])
#Privater Artikel
$ Post.status_private.order(created_at: :desc).page(params[:page])
#Rangfolge(Top 3 von Like)
$ Post.status_public.joins(:likes).group(:post_id).order('count(likes.post_id) desc').limit(3)
Arbeitsinhalt | Benötigte Zeit |
---|---|
Schätzungen | 0.75H |
Implementierung / Überprüfung: Neuer Beitrag | 7H |
Implementierung / Überprüfung: Benutzerdetailseite | 2.25H |
Implementierung / Überprüfung: Post Details Seite(localhost/posts/:id) | 1H |
Implementierung / Überprüfung: Artikelliste / Detailseite(Like Ranking) | 0.5H |
Implementierung / Überprüfung: Artikelliste(localhost/posts) | 0.125H |
Implementierung / Verifikation: TOP(localhost) | 0.125H |
gesamt | 12H |
Ich habe 7 Stunden gebraucht, um die Post-Edit-Seite zu erstellen, daher bereue ich es, aber ich bin froh, dass ich es geschafft habe, sie zu erstellen.
Wir hoffen, dass dieser Artikel hilfreich ist, wenn Sie dem Artikel öffentliche / private Funktionen hinzufügen.
[Rails] enum tutorial Verwenden Sie _prefix (Präfix) _suffix (Suffix), wenn Sie enum von Rails5 verwenden
Recommended Posts