1

認証にdeviseを使用しています。ユーザーがサインアップするとき、プロファイル ルートとして使用したいプロファイル名を作成します。したがって、次のようになります: www.myapp.com/profile-name. 私が直面している問題は、ルートが正しい場所に行かないことです。

ルート.rb

resources :majors do 
  resources :reviews
end 

devise_for :users

...

match '/:id' => 'users#show', as: :user_profile

ルート ファイルの一番下に :user_profile ルートを配置しました。私のレーキ ルートの一部は次のようになります。

major GET            /majors/:id(.:format)   majors#show
user_profile GET     /:id(.:format)          users#show

プロファイル ページ (myapp.com/my-custom-profile-name) に問題はありません。しかし、専攻ショーのページではuser_profile_path、ユーザーのプロファイルにリンクするために を使用しています。URL は www.myapp.com/:id です。:id は専攻の :id です。そのため、メジャーの :id が user_profile の :id と混ざり合っています。

私のユーザーコントローラーは次のようになります。

def show
  @user = User.find_by_profile_name(params[:id])
  @reviews = @user.reviews
end  

私はURLを変更し、さまざまな領域でテストし、ルートファイルの順序を変更し、これを一日中検索してテストしました. 何が欠けているのかわかりません。それは本当に簡単だと思いますが、それは私を逃れています。何か案は?


解決:

解決策は、最初にルートを正しく取得することでした。カスタムの動的 URL (myapp.com/user-profile-name) を作成したので、ルートで ID を呼び出す必要がありました。

get '/:id' => 'users#show', as: :id  

これにより、ルートが次のように変更されました。

id GET        /:id(.:format)              users#show

ユーザーがレビューを共有すると、ユーザーの名前がレビューの横に投稿されます。レビューの名前からプロフィールにリンクするのに問題がありました。私はこのようなビューでそれを行うことができました:

<%= link_to review.user.profile_name, id_path(review.user.profile_name) %>
4

1 に答える 1

1

特定のユーザー プロファイルにアクセスするには、ユーザー プロファイル ID を user_profile 名前付きルートに渡す必要があります。

user_profile_path(@user)

于 2013-04-01T23:53:03.893 に答える