2013-04-01 88 views
1

我正在使用設計進行身份驗證。註冊用戶時,請創建一個我想用作其個人資料路線的個人資料名稱。所以,它可能看起來像這樣: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) %> 

回答

1

要到特定的用戶配置文件,您需要將用戶個人資料ID傳遞到user_profile命名的路線:

user_profile_path(@user)

+0

那導致以下路由錯誤: 沒有路由匹配{:controller =>「users」,:action =>「show」,:id => nil} – lflores

+0

您如何在視圖上使用路徑助手? –

+0

這只是一個例子,我猜@user是返回零。您需要將用戶以任何您想要的方式傳遞給幫助者。我不知道你的'主要'控制器是什麼樣的,但你需要在那裏設置一個用戶變量,然後像我的例子那樣將它傳遞給助手。 – messick