前提・実現したいこと
formオブジェクトを用いてタグ付きの投稿を実装しましたが、user_idがなかったので、付け直しています。
マイグレートのし直し、アソシエーションは記述しました。
コントローラーに問題があると思うのですが、一日費やしても解決できませんでした。
検索しても試した記事しか出てこなく、解決方法が見つかりません。
エラー画面のコンソールで@user, current_userなどとしてもundefinedになってしまいます。
User.allは取得できました。
発生している問題・エラーメッセージ
NameError in PostsController#create undefined local variable or method `current_user' for #<PostTag:0x00007fc867956140> Extracted source (around line #12):
deviseを使った時に、ログイン中のユーザー情報を取得する方法
使用するコントローラ内にて、
before_action :authenticate_user!
とすると、current_userでユーザー情報を取得できます。
ログイン中のユーザーIDであれば、以下のようにすれば取得可能です。
@user = current_user.id
これが書いてある記事などを参考にしました。
該当のソースコード
ruby
1class PostsController < ApplicationController 2 3 before_action :authenticate_user!, only: [:new, :create] 4 5 def index 6 @posts = Post.all.order(created_at: :desc) 7 end 8 9 def new 10 @post = PostTag.new 11 end 12 13 def create 14 @user = current_user 15 @post = PostTag.new(post_params) 16 if @post.valid? 17 @post.save 18 return redirect_to root_path 19 else 20 render "new" 21 end 22 end 23 24 def search 25 return nil if params[:input] == "" 26 tag = Tag.where(['name LIKE ?', "%#{params[:input]}%"]) 27 render json:{ keyword: tag } 28 end 29 30 31 private 32 33 def post_params 34 @user = current_user 35 36 params.require(:post_tag).permit(:message, :name).merge(user_id: current_user) 37 end 38end
補足情報(FW/ツールのバージョンなど)
rails 6.0.0
ruby 2.6.5
回答2件
あなたの回答
tips
プレビュー