1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Rails] enumを使って下書き機能を作った

Posted at

はじめに

下書き機能を作ろうと思った時にあまり記事がなかったので記録として残しておこうと思いました。

開発環境

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の中身は上記と同じです。

終わりに

間違いがありましたら編集リクエスト、コメントをお願いします。

参考文献

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?