ProgateのRuby on Railsまとめ⑦

【Ruby on Rails Ⅸ】

📖投稿とユーザーを紐づける
→どのユーザーがその投稿を作成したか、各投稿に情報をもたせるためにpostsテーブルにuser_idカラムを用意する

📖rails g migrationを用いてマイグレーションファイルを作成し、ファイルの中身を変更
→add_column :posts,:user_id,:integer
→rails db:migrateでデータベースに反映
バリデーションも設定しておく!

📖新規投稿をログインユーザーに紐づける
→newメソッドの中で、user_id:@current_user.idとする

🌟@user=User.find_by(id:@post.user_id)
→投稿詳細ページなので、postsコントローラのshowアクション内に書く

📖モデルにインスタンスメソッドを定義する
Postモデルでuserメソッドを定義すると、Postインスタンスに対して用いることができる
例)
def user
return User.find_by(id:self.user_id)
end
インスタンスメソッド内で、selfはそのインスタンス自身を指す。(ここではpost)
投稿に紐づいたuserインスタンスを戻り値として返す

📖ユーザーに紐づく複数の投稿
→複数のデータ取得するときは、whereを使う
📖今度はUserモデル内に、ユーザーに紐づいたPostインスタンスを戻り値として返すpostsメソッドを定義する
例)
def posts
return Post.where(user_id:self.id)
end
ここのselfはuser
📖ユーザー詳細ページに
<% @user.posts.each do |post| %>
表示する内容
<%end%>
→whereメソッドで取得した値は配列に入っているので、each文でそのユーザーの各投稿を表示

🌟
<%if @post.user_id ==@current_user.id %>
<%end%>
→投稿を作成したユーザーのidと、現在ログインしているユーザーのidが等しい場合、編集・削除リンクを表示させる

📖直接アクセスしても編集できないよう、postsコントローラ内にensure_correct_userメソッドを用いる
→edit、update、destroyアクションで適用


この記事が気に入ったらサポートをしてみませんか?