認証に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) %>