はじめに
Twitterライクのようなアプリを作成してみたが、投稿を公開・非公開できるようにしたい・・・!という人に向けて執筆します!
完成形
下記の写真のように、公開非公開ボタンを作成し、公開を押して投稿すると全員にその投稿が表示され、非公開を押して投稿すると全体には表示されないが、マイページに自分だけが見れる投稿が作成される仕組みを作ります!
公開か非公開かを判定するためのカラムを追加しよう!
rails g migration AddreleaseToテーブル名 release:integer
rails db:migrate
該当するコントローラーの最後の方の行にparams〜とあると思います!
そこに,:releaseをつけたそう!
params.require(:tweet).permit(:body,:title, :image,:release)
新規投稿ページ
以下のコードを<%= form_for 〜 do |f| %> 〜 <% end %>の間に挿入します!
<div class="form-check form-check-inline">
<%= f.radio_button :release, '1' ,class:"form-check-input mb-3" %>
<%= f.label :release, '公開', value: 1 %>
</div>
<div class="form-check form-check-inline">
<%= f.radio_button :release, '0',class:"form-check-input mb-4" %>
<%= f.label :release, '非公開', value: 0 %>
</div>
一覧ページのコントローラー
def index
@tweets = Tweet.where(release:1).order(id: "DESC")
end
このwhere分が今回の鍵です!
where(カラム名:値)とすることで、特定のレコードを取得することができます!
今回はreleaseカラムの値が1、つまり公開する投稿のレコードを取得しています!
一覧ページのview
<% @tweets.each do |t| %>
<%= t.title %>
<%= t.body %>
<% end %>
マイページのコントローラー
def show
@user = User.find(params[:id])
end
マイページのビュー
<%if current_user.id == @user.id %>
<% @user.tweets.each do |t| %>
<%= t.title %>
<%= t.body %>
<% end %>
<% else %>
<% @user.tweets.where(release:1).each do |t| %>
<%= t.title %>
<%= t.body %>
<% end %>
<% end %>
if文にて条件分岐しています!
もしログインしているユーザーがマイページのユーザーと一致していれば、自分の投稿を全部表示
そのほか(ログインしているユーザーとマイページのユーザーが違っているとき)の場合、そのページのユーザーの公開の投稿のみ表示
というわけです!
最後に
いかがでしたでしょうか?
ほかにももっといい書き方があると思うので、コメントなどで教えていただけるとありがたいです!
ここまで読んでいただきありがとうございました!
少しでも力添えできていたなら幸いです!