0

example.com/users/$ID/editを非表示またはマスクしてexample.com/profile/editにしたいと思います

config/routes.rb

resources :users

app/controllers/users_controller.rb

def edit
@user = User.find(params[:id])
end

ルートを追加してみました

match '/profile/edit' => 'users#edit', :as => :edit_profile

しかし、example.com/profile/editにアクセスすると、 edit メソッドはユーザーの ID が見つからないと文句を言います。

ブラウザから ID をマスクする方法はありますか?

4

2 に答える 2

2

現在のユーザーのプロファイルを編集しようとしている場合は、編集アクションで次を使用できます。


    def edit
      @user = User.find_by_id( params[:id] ) || current_user
    end

これはまず、ユーザーが見つからない場合は nil を返す id パラメータでユーザーを検索しようとします。戻り値が nilの場合は、ヘルパー メソッド@userの戻り値に設定されます。current_userこれは、現在ログインしているユーザーを取得する方法を提供するDeviseのようなものを使用していることを前提としています。current_user

もう1つのメモ。get リクエストのみが edit アクションに対して有効であることを指定するには、ルートの match を get に変更する必要があります。



    get 'profile/edit' => 'users#edit' , as: edit_profile

ユーザーが他の人のプロファイルを編集できないようにするには、ユーザーをロードした後に次のようなものが必要です。



    redirect_to( root_path ) and return unless @user == current_user

これにより、現在のユーザーが別のユーザーのプロファイルを編集できなくなります。

于 2012-08-21T14:12:19.163 に答える
0

ログインしたユーザーがそのプロファイルを変更できるようにしたい場合は、ユーザーの ID をセッションに保存する必要があります。

したがって、ユーザーがログインすると、その ID がセッションに保存されます。

session[:user_id] = ...

次に、編集方法は次のようになります

def edit
  @user = User.find(session[:user_id])
end

その解決策があなたの望むものではない場合は、マッチ コードに ':id' パラメータを追加するだけでよいでしょう。

于 2012-08-21T14:09:46.817 に答える