2022年5月20日 投稿機能を作成
今回実装した機能
仕様
userとpostを紐付ける
new Postリンクをクリックすると、投稿フォームが出る
投稿に成功したら、投稿一覧に遷移する
投稿に成功したら、「投稿に成功しました」というフラッシュメッセージを出す
実装を通した気づき
Yano
- 外部キーの途中追加・・・rails g migration add_user_id_to_posts
- migrationファイルに追記
class AddUserIdToPosts < ActiveRecord::Migration[6.0] def change add_reference :posts, :user, foreign_key: true end end
- ログインしているユーザーの持つpostを新規作成
- saveに成功した場合はユーザーの投稿一覧ページに遷移させる
- user_posts_path(current_user)とする。
- save!とすると投稿に失敗した場合に例外を返す。falseの処理がある場合はsaveを使用する。
def create @post = current_user.posts.build(post_params) if @post.save redirect_to user_posts_path(current_user) else render 'new' end end
Yui
- current_userは、sorceryのメソッドで現在のユーザーを取得できます。
- ルーティングの設計方法が完全に理解できていないことに気づきました。
- 今回投稿はユーザーモデルに紐づくためネストして記述しました。しかし、それだけだと投稿一覧ページに遷移出来ずエラーが発生しました。
- そこで、ネストしないユーザーに紐づかないルーティングを追加するとうまく遷移できるようになりました。
Rails.application.routes.draw do resources :users do resources :posts end resources :posts end
Yuki
# POSTリクエストで以下のURLにアクセスした場合、 # アクセスしたユーザーのポストを作成する /users/user_id/posts
- ログインした時に、投稿一覧ページになっていた方が良いので、redirect_toのパスを投稿一覧ページにしました。
redirect_back_or_to user_posts_path(@user), notice: 'Login successful'