2016-03-25 8 views
0

私は現在Ruby on Railsのに登録していますが、私はそれに沿って次のように自分の好みに合わせて修正しています。user_idでdeviseユーザーを探す方法は?

しかし、私は私の頭を傷つけてしまう問題に遭遇しました。

私がしたいのは、showページのuser_idです。チュートリアルでは、devise、​​の新しいフィールドを作成しています。

この手順をスキップしました。ユーザーをそのように識別したくないからです。私は彼らに彼らの"user_id" + "first_name" + "last_name"によって識別されたかった。チュートリアルで何をしたのかで、自分がユニークな​​を使用して自分のサイトにサインアップした個々のユーザーのカスタムルートを作成したということでした。私の場合は"user_id" + "first_name" + "last_name"になります。誰かがこれについていくつかの光を当てることができ、うまくいけば、私はこのテーマについてもっと知ることができるリソースを私に指摘すると、本当に感謝します。

読んでいただきありがとうございます。 :D


これはチュートリアルの内容です。

class ProfileController < ApplicationController 
    before_filter :authenticate_user!, only: [:show] 

    def show 
    @user = User.find_by_profile_name(params[:id]) 
    //@user = User.find_by_user_id(params[:id]) //my code that I thought would work 
    if @user 
     @statuses = @user.statuses.all 
     render action: :show 
    else 
     render file: 'public/404', status: 404, formats: [:html] 
    end 
    end 
end 

routesファイル

Rails.application.routes.draw do 
    get '/:id', to: 'profile#show' 

答えて

1

あなたはおそらく、あなたのID/FIRST_NAME/LAST_NAMEのparamsを分離するスラッシュを持っている必要があります。その理由は、誰かの識別子が105johnsmithとして終わるとしましょう。自分の名前が5johで、最後の名前がnsmithで、そのIDが105ではなく10であることをどのように知っていますか?あなたはそうしない。

しかし、識別子の最初の数字が実際にユーザーのIDであると仮定する場合は、params[:id]extract the integer id from the stringのものをすべて取ります。

だからあなたのようなコードがあるだろう:あなたは:idパラメータの名前を変更したい場合は、

id = params[:id].scan(/\d+/).first 
@user = User.find_by_profile_name(id) 

を可能性がありますが、それは、それが動作するためには必須ではありません。

そして、あなたは(/105/john/smith、あるいは/105/johnsmithのようなURLの場合)のパラメータ間のスラッシュを置く(もっと賢明な)道を行きたいと思ったならば、あなただけのいずれかであるためにあなたのルートを変更したい:

get '/:id/:first_name/:last_name', to: 'profile#show' # maps /105/john/smith 
# or 
get '/:id/:full_name', to: 'profile#show' # maps /105/johnsmith 

これでコントローラのコードをまったく同じままにすることができます。箱から出してユーザーIDを検索するに

0

ユーザーでは、コントローラを表示:USERSのSHOW.HTML.ERBで@user = User.find(params[:id])

<p><%- @user.id %><p>

関連する問題