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アクションで適用
この記事が気に入ったらサポートをしてみませんか?