2016-08-12 11 views
0

友好的なURLを組み込んだ後、私のedit_userパスはusers#editアクションにルーティングされません。 edit_user_pathヘルパーのレンダリングされたURLが正しいです。リンクをクリックするたびに、最初に正しいURLに移動してから、rootアクションをリダイレクトします。Rails edit_userルートが機能しない

ルート:edit_user_path GET /users/:id/edit(.:format) users#edit

リンクERB:<%= link_to 'Edit Account', edit_user_path(@user), class: 'button' %>

レンダリングされたHTML:http://localhost:3000/users/plopp/edit

コントローラー:

class UsersController < ApplicationController 

    before_action :require_signin, except: [:new, :create] 
    before_action :require_correct_user, only: [:edit, :update, :destroy] 

    def index 
    @users = User.all 
    end 

    def show 
    @user = User.find_by!(username: params[:id]) 
    @reviews = @user.reviews 
    @favorite_movies = @user.favorite_movies 
    end 

    def edit  
    end 

    def update 
    if @user.update(user_params) 
     redirect_to @user, notice: "Account successfully updated." 
    else 
     render :edit 
    end 
    end 
end 

    private 

    def user_params 
    params.require(:user). 
    permit(:name, :email, :username, :password, :password_confirmation) 
    end 

    def require_correct_user 
    User.find_by!(username: params[:id]) 
    unless current_user?(@user) 
     redirect_to root_url 
    end 
    end 

答えて

0

私はあなたが#require_correct_user

def require_correct_user 
    @user = User.find_by!(username: params[:id]) 
    unless current_user?(@user) 
     redirect_to root_url 
    end 
    end 
01に間違いがあると思いますそれがチェックする前ににユーザーを割り当てる必要がありますので

before_action :require_correct_user, only: [:edit, :update, :destroy] 

のそれは、@user変数を渡す#current_user?ヘルパーによって、現在のユーザーをチェックしているため

あなたが見つけ、#editアクションを処理する前に、変数@user
にユーザーを割り当てる必要が#require_correct_userメソッドを実行しますその変数

+0

それはトリックでした。このようなバグを見つけるたびに、時間をかけすぎて追い詰めようとすると、そのような明白な監視に終わります。もっと経験を積むにつれて、より良くなることを願っています。 –

関連する問題