我正在使用設計進行身份驗證。註冊用戶時,請創建一個我想用作其個人資料路線的個人資料名稱。所以,它可能看起來像這樣:www.myapp.com/profile-name。我遇到的問題是路線不適合正確的地方。導致路由混淆,因爲:編號
的routes.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
我已經改變了周圍的網址,測試了不同的領域,改變了我的路線文件的順序,搜索和測試這個整天。我無法弄清楚我錯過了什麼。我認爲這非常簡單,但是它讓我無法迴避。有任何想法嗎?
SOLUTION:
的解決辦法是先拿到航線正確。自從我創建了一個自定義的,動態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) %>
那導致以下路由錯誤: 沒有路由匹配{:controller =>「users」,:action =>「show」,:id => nil} – lflores
您如何在視圖上使用路徑助手? –
這只是一個例子,我猜@user是返回零。您需要將用戶以任何您想要的方式傳遞給幫助者。我不知道你的'主要'控制器是什麼樣的,但你需要在那裏設置一個用戶變量,然後像我的例子那樣將它傳遞給助手。 – messick