Hell frens在顯示頁面中用用戶名替換user_id在rails中
我想在用戶的顯示頁面中顯示用戶名而不是user_id。
例如,
一個usr_id 300爲名爲哈里用戶存在於數據庫中。因此,如何顯示
,而不是
在url
。
這可以從路線文件內完成嗎?
感謝
Hell frens在顯示頁面中用用戶名替換user_id在rails中
我想在用戶的顯示頁面中顯示用戶名而不是user_id。
例如,
一個usr_id 300爲名爲哈里用戶存在於數據庫中。因此,如何顯示
,而不是
在url
。
這可以從路線文件內完成嗎?
感謝
這通常被稱爲個性化網址,和一點點謹慎,你可以很容易地處理這個問題。第一...
在你的路線:
# the simple case
get '/:username' => 'users#show', :constrain => { :username => /[a-zA-Z-]+/ }
# ...with vanity_url_path(@user) helpers
get '/:username' => 'users#show', :as => 'vanity_url'
# or routing something more complicated with all the default resourceful routes
resources :users, :path => '/:username'
# or even just defining a bunch of routes for users with this format
controller :users, :path => '/:username' do
get '/profile', :action => :profile #=> /johnsmith/profile => UsersController#profile
end
在上面的代碼,我避免重複爲每個清晰路線:constrain
選項。您需要調整正則表達式以匹配您的用戶名,然後確保您在任何路線上都擁有它。
如果這將成爲從您的應用程序中訪問用戶的默認方式(即,不僅僅是訪問用戶個人資料的簡便方式),您將希望覆蓋用戶模型中的to_param
方法。這使您可以使用url_for
助手,如form_for @user
而無需指定其他參數。
class User
def to_param
username
end
end
另一個小提示:如果你與你的路由遊戲,並試圖做任何事情比基礎知識多,一定要經常打電話$ rake routes
在命令行中看到Rails的航線目前有什麼認識。清理你不需要的東西也是很好的做法。 ;)
嘗試在routes.rb中這樣的事情
map.user_permalink 'users/:user_name', :controller => 'users', :action => 'show'
的意見以後使用這樣的:
<%= link_to user.name, user_permalink_path(user.user_name.parameterize) %>
我不知道,如果代碼將通過簡單的工作粘貼它,但你明白了:)
如果你想擁有/:用戶名,那麼試試你的routes.rb文件(這應該是塊的最後一行! - 最後路線創建)
match "/:id", :to => "users#show", :as => :friendly_user
然後,只是爲了使它不那麼可怕,你可以使用the make_permalink gem輕鬆創建友好的URL,名稱和模型覆蓋to_param方法
# models/user.rb
make_permalink :username
def to_param
permalink
end
而到了!使其更好,覆蓋User.find方法,通過永久或ID
def self.find(query)
self.find_by_username(query) || super(query)
end
工作,會爲User.find工作(1)或User.find(my_username)。
希望幫助,
尼古拉斯福伊薩薩
雅它似乎取代id(300)的名稱**哈利**,但也給了錯誤說沒有找到與id哈里的記錄。我粘貼了「get'/:username'=>'users#show' ,::constrain => {:username =>/[a-zA-Z - ] + /}「到路徑文件的底部,並將其添加到我的用戶模型012_我是否錯過了某些東西或者我做錯了什麼? – Gagan 2011-02-28 10:43:50
@Gagan您仍然需要更新您的控制器方法以從用戶名參數中查找用戶。默認類似於'User.find(params [:id])',它需要數字主鍵id。你想要的東西像'User.find_by_username(params [:username])'而不是。 – coreyward 2011-02-28 15:25:46