前提・実現したいこと
rails6で掲示板サイトを作っています。
ログインしているユーザーだけが編集できるようにしていて、編集ページまでいくことは可能なのですが、更新ボタンを押すと下のエラーが発生してしまいます。
エラーの後にホームのページに戻ると再度ログインしないといけないようになっているのですが、ログインしなおしてユーザーの情報を見ると変更はされています。
ちなみに、ログインしているユーザーは投稿の編集や自分のコメントの削除はできる状態です。
ユーザーの編集を行った時だけ下のエラーが出ます。
分かる方教えていただけると助かります。よろしくお願いします。
発生している問題・エラーメッセージ
コード
routing
1 devise_for :users 2 # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html 3 root to: "homes#index" 4 resources :users 5 resources :posts do 6 resources :comments, only: [:create, :destroy] 7 resources :likes, only: [:create, :destroy] 8 end
usermodel
1 devise :database_authenticatable, :registerable, 2 :recoverable, :rememberable, :validatable 3 4 attachment :profile_image 5 has_many :posts, dependent: :destroy 6 has_many :comments, dependent: :destroy 7 has_many :commented_posts, through: :comments, source: :post 8 has_many :likes, dependent: :destroy 9 has_many :liked_posts, through: :likes, source: :post 10 11 def posts 12 return Post.where(user_id: self.id) 13 end 14 15 def alread_liked?(post) 16 self.likes.exists?(post_id: post.id) 17 end
userscontroller
1 def index 2 @users = User.all 3 end 4 5 def show 6 @user = User.find(params[:id]) 7 end 8 9 def edit 10 @user = User.find(params[:id]) 11 end 12 13 def update 14 @user = User.find(params[:id]) 15 @user.update(user_params) 16 redirect_to user_path(@user) 17 end 18 19 private 20 def user_params 21 params.require(:user).permit(:username, :student_id, :email, :password, :profile_image, :profile) 22 end
usershowview
1 <% if @user.id == current_user.id %> 2 <div class="loginuser-only"> 3 <%= link_to '編集',edit_user_path(@user), class: 'loginuser-only-btn' %> 4 </div> 5 <% end %>
editview
1 <%= form_with model: @user do |f| %> 2 3 <div class="edit-field"> 4 <%= f.label :username,'ユーザー名', class: 'user-edit-label'%> 5 <%= f.text_field :username, class: 'user-edit-field' %> 6 </div> 7 8 <div class="edit-field"> 9 <%= f.label :student_id,'学籍番号', class: 'user-edit-label'%> 10 <%= f.text_field :student_id, class: 'user-edit-field' %> 11 </div> 12 13 <div class="edit-field"> 14 <%= f.label :email, class: 'user-edit-label'%> 15 <%= f.email_field :email, class: 'user-edit-field' %> 16 </div> 17 18 <div class="edit-field"> 19 <%= f.label :password, class: 'user-edit-label'%> 20 <%= f.password_field :password, class: 'user-edit-field' %> 21 </div> 22 23 <div class="edit-field"> 24 <%= f.label :profile,'プロフィール', class: 'user-edit-label'%> 25 <%= f.text_area :profile, class: 'user-edit-field user-edit-area', rows: 10 %> 26 </div> 27 28 <div class="edit-field"> 29 <%= f.label :profile_image,'プロフィール画像', class: 'user-edit-label'%> 30 <%= f.attachment_field :profile_image, class: 'user-edit-field' %> 31 </div> 32 33 <div class="user-edit-submit-container"> 34 <%= f.submit '更新', class: 'user-edit-submit'%> 35 </div> 36 37 <% end %>
postcontroller
1 def index 2 @posts = Post.all 3 end 4 5 def show 6 @post = Post.find(params[:id]) 7 @comments = @post.comments 8 @comment = Comment.new 9 @like = Like.new 10 end 11 12 def new 13 @post = Post.new 14 end 15 16 def create 17 @post = Post.new(post_params) 18 @post.user_id = current_user.id 19 @post.save 20 redirect_to post_path(@post) 21 end 22 23 def edit 24 @post = Post.find(params[:id]) 25 end 26 27 def update 28 @post = Post.find(params[:id]) 29 @post.update(post_params) 30 redirect_to post_path(@post) 31 end 32 33 def destroy 34 @post = Post.find(params[:id]) 35 @post.destroy 36 redirect_to posts_path 37 end 38 39 private 40 def post_params 41 params.require(:post).permit(:title, :body, :image) 42 end
postshowview
1 <% if @post.user.id == current_user.id %> 2 <div class="post-show-edit-destroy"> 3 <%= link_to '編集する',edit_post_path(@post), class: 'post-show-btn' %> 4 <%= link_to '削除する',post_path(@post), method: :delete, data: {confirm: 'この投稿を削除しますか?'}, class: 'post-show-btn' %> 5 </div> 6 <% end %>
試したこと
ログイン後にログインしている人しか見れないページに飛んでいるのをチェックし、ログインできているか確認した
userscontrollerにbefore_action :authenticate_user!をつけてみたが、更新を押すとエラーは出ないがログイン画面に遷移される
補足情報(FW/ツールのバージョンなど)
rails 6.0.3.4
ruby 2.6.6
gem devise
docker
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。