はじめに
下書き機能を作ろうと思った時にあまり記事がなかったので記録として残しておこうと思いました。
開発環境
ubuntu(WSL)
Ruby 2,5.1
Rails 6.0.2
事前準備
以下の機能は作成済みとします。
- 投稿機能・詳細・削除・編集(Post)
- ユーザーの作成・詳細(User)
models/post.rb
belongs_to :user
models/user.rb
has_many :microposts, dependent: :destroy
Postテーブルにカラムを追加する
まずはPostモデルにstatusカラムを追加しboolean型にします。
booleanでなくintergerでも可能です。
以下のコマンドを入力します。
bin/rails g migration AddStatusToPost status:boolean
マイグレーションファイルを編集します。
migrationfile.rb
def change
add_column :microposts, :status, :boolean, default: true, null: false
end
編集したらマイグレートします。
Postモデルにenumを追加する。
models/post.rb
enum status: { draft: false, published: true }
statusカラムのdraft(下書き)をfalseに指定し、statusカラムのpublished(公開)をtrueに指定します
ユーザーごとの情報を取得
@user
でuserのidを取得。
users_controller.rb
#下書き用
def confirm
@user = User.find(params[:user_id])
@microposts = @user.microposts.draft.page(params[:page])
end
#公開用
def show
@user = User.find(params[:id])
@microposts = @user.microposts.published.page(params[:page])
end
ルーティングを追加
collection
をつけるとURLにidが付かなくなります
routes.rb
resources :users do
get 'confirm'
end
Viewの設定
関係あるところだけを抜粋しました。
view/users/show.html.slim
//ユーザーの詳細画面
= link_to "投稿一覧", @user
= link_to "お気に入り", user_likes_path(current_user)
= link_to "下書き一覧", user_confirm_path(current_user)
//自分の投稿を表示する
- if @microposts.present?
= render "microposts/list", microposts: @microposts
- else
h4 投稿はありません
下書き一覧は自分の好みに合わせて書いてください。
view/users/confirm.html.slim
h4 下書き一覧
table.table.table-hover
thead.thead-default
tr
th = Micropost.human_attribute_name(:title)
th = Micropost.human_attribute_name(:content)
th = Micropost.human_attribute_name(:created_at)
th
tbody
- @microposts.each do |micropost|
tr
td = link_to micropost.title, micropost
td = link_to micropost.content, micropost
td
icroposts/list
の中身は上記と同じです。
終わりに
間違いがありましたら編集リクエスト、コメントをお願いします。