0

データベースにユーザーを作成すると、一意の識別子文字列も作成されます。

私のルートでは、私は持っています:

match '/users/:unique_identifer', :to => 'users#show'

この部分は正常に機能しています。/ users / xyzに移動すると、適切なユーザーの表示アクションが表示されます。

ただし、ユーザーレコードを更新しようとすると、/ users/SOMENUMBERにリダイレクトされます。SOMENUMBERはユーザーのIDです。コントローラのshowアクションには次のものがあるため、これによりエラーが発生します。

def show
    @user = User.find_by_unique_identifier(params[:unique_identifer])
end

つまり、showアクションは、ユーザーIDではなく、一意の識別子でのみユーザーを検索するようになりました。

更新アクションは次のとおりです。

def update
    @user = User.find_by_unique_identifier(params[:unique_identifer])
    if @user == current_user && @user.update_attributes(params[:user])
      redirect_to @user
    else
      redirect_to @user
    end
 end

更新アクションを取得して、ユーザーの表示アクションにリダイレクトしますが、/ users / IDの代わりに適切なリンク(/ users / unique_identifier)を使用するにはどうすればよいですか?

4

2 に答える 2

2

to_param(および生活を楽にするためにfrom_param)を再定義する必要があります。これは、オブジェクトのリンクを生成するために使用され、デフォルトではidフィールドを使用します。

だからあなたの場合

class User < ActiveRecord::Base
  def to_param
    unique_identifer
  end
end

そして今、users_path(@user)はあなたに/ users/your-uniq-identifierを与えるはずです

ここに例を含む素晴らしい説明があります:http: //apidock.com/rails/v3.1.0/ActiveRecord/Base/to_param

于 2012-05-04T22:16:05.077 に答える
0

これを試して

redirect_to user_path(@user.unique_identifer)

また

redirect_to :action => :show, :unique_identifer => @user.unique_identifer
于 2012-05-04T18:07:46.720 に答える