Progate_Ruby on Rails5道場コース4
1・目標物の確認
2・投稿とユーザーの紐付け_準備
・「rails g migration マイグレーションファイル名」をターミナルで実行
・作成されたマイグレーションファイルに「add_column :テーブル名,:カラム名,:データ型」
・「rails db:migrate」でデータベースに反映
・Postモデルにバリデーションを追加
3・投稿とユーザーの紐付け_新規投稿
・Postモデルにuserメソッドを作り戻り値「User.find_by(id: self.user_id)」
・postsコントローラのshowアクションに「@user」を定義(@user=@post.user)
・show.html.erbに指定のコードを貼り付け、
+画像の表示:<img src="画像の場所">(画像の場所:"<%="/user_images/#{@user.image_name}"%>")
+ユーザ名のリンク:定義した@userのname
4・投稿一覧にもユーザー情報を表示
・指定のコードをshow.html.erbに貼り付け
+ユーザー情報と紐付けが必要な画像:「/user_images/#{post.user.image_name}」
ユーザー名、リンク:「post.user.name, "/users/#{post.user.id}"」
5・ユーザー詳細ページに投稿表示
・userモデルにpostsメソッドを定義
+@postに「Post .where(user_id: self.id)」
・posts/index.html.erbからコードを借りて貼り付け
+each文で全件表示できる様にする(@user.posts.each do |post|)
6・投稿の編集、削除
・posts/index.html.erbにif文。
<% if @current_user.id == @post.user_id %>
・ensure_correct_userメソッドを追加
def ensure_correct_user @post=Post.find_by(id: params[:id]) if @current_user.id != @post.user_id.to_i flash[:notice] = "権限がありません" redirect_to("/posts/index") end end
7・いいね機能_準備
・コンソールで「rails g model Like user_id:integer post_id:integer」を実行
・「rails db:migrate」でデータベースに反映
・Likeモデルにバリデーション追加
8・いいねボタン準備
・ルーティングと、Likeコントローラの手作成
class LikesController < ApplicationController before_action :authenticate_user def create end def destroy end end
9・いいねボタンの作成
・likesコントローラのcreateアクションとdestroyアクションを作成
createアクション
+@like=Like.new(user_id: @current_user.id,post_id: params[:post_id])
+redirect先は「/posts/#{params[:post_id]}」
(destroyアクションはnewではなくfind_by)
・application.html.erbの<head>内に指定のコードを貼り付け(Font awesome)
・posts.scssにも指定のコードを貼り付け
・show.html.erb→いいねボタンを表示させるためのコードを追加。
+createアクションとdestroyアクションどちらも「post」なので{method: "post"}を忘れない。
+link_toメソッドは<%= link_to("URL") do%> 〜<% end %> で間にHTMLのコード記載のパターン。
<% if Like.find_by(user_id: @current_user.id, post_id: @post.id) %> <%= link_to("/likes/#{@post.id}/destroy",{method: "post"}) do%> <span class="fa fa-heart like-btn-unlike"></span> <%end%> <% else %> <%= link_to("/likes/#{@post.id}/create",{method: "post"}) do%> <span class="fa fa-heart like-btn"></span> <% end %> <%end%>
10・いいね数の表示
・postsコントローラのshowアクションに「@likes_count=Like.where(id: @post.id).count」
・show.html.erbに<%= @likes_count %>追加
11・いいねした投稿の表示
・users/show.html.erbに指定のコードを貼り付け
・ルーティング「"users/:id/likes"」、ビューファイル「likes.html.erb」、usersコントローラにlikesアクション追加
・likesアクション
+@userにidをユーザーの代入
+@likes=Like.where(user_id: @user.id)でユーザーがいいねした複数の投稿取得
・likes.html.erb
+指定のコードの貼り付け、users/show.html.erbの投稿表示するためのコードを貼り付け
+each文を<% @likes.each do |like|%>に変え、<% post=Post.find_by(id: like.post_id) %>を追加
12・ハッシュ化の準備
・Gemfileに「gem 'bcrypt'」を追加してターミナルで「bundle install」を実行
13・パスワードのハッシュ化、保存
・has_secure_passwordをUserモデルに追加
・password_digestカラムの作成 ※カラムの削除はremove_column
・rails db:migrateでデータベースに反映
・rails consoleを起動して、idが1のユーザーのパスワードを指定通り実際にハッシュ化する
14・ハッシュ化されたパスワードでログイン
・ログインの条件に「@user.authenticate (params[:password])」を追加。
+andなので「&&」で条件をつなぐ。(上の文にあるpassword: params[:password]は削除)