我希望用戶能夠在site.com/myNameHere上擁有一個配置文件頁面。 Rails尋找名爲「myNameHere」的控制器。是否可以設置routes.rb,以便如果找不到控制器,「myNameHere」會作爲參數發送給另一個控制器?如何在Rails應用程序中實現虛空URL?
回答
您可以添加一個路線是這樣的:
map.profile_link '/:username', :controller => 'profiles', :action => 'show'
一定要添加它足夠低,在該文件中,下方的資源,它不與其它路線干擾。它應該是最低優先級。接下來,您需要更改您的show動作以使用用戶名代替id:
def show
@user = User.find_by_username(params[:username])
end
這就是它的全部。快樂的編碼!
UPDATE:
我已經擴大了這個答案成爲一個完整的博客文章,Vanity URLs in Ruby on Rails Routes。我有其他代碼示例和更詳盡的解釋。
謝謝,工作起來就像一個魅力。 – user258980 2010-01-26 17:56:10
您需要記住,根級別的通配符路由會捕獲應該是頂級404錯誤的內容。即http://domain.com/askdjasd。所以你可能想在你的show動作中添加一些異常處理(找不到),並渲染你的404而不是500的錯誤。 – 2010-12-20 16:13:49
根據Dave Rapin的說法,您可以在控制器中使用'rescue_from ActiveRecord :: RecordNotFound :: with:>:your_404_method'來在未找到用戶時自動顯示404錯誤。如果你使用'find_by_attribute'方法,你將不得不手動提出這個錯誤,因爲它們不會自動引發它們。因此,使用'raise ActiveRecord :: RecordNotFound除非@user = User.find_by_username(params [:username])'和相關的救援,你是金。 – coreyward 2011-01-05 01:55:32
只是想我會更新這個Rails 3.我在我的用戶模型中有一個字段「網站」,它將充當虛榮路由,並且我將路由到每個虛榮路由的靜態頁面。如果虛擬路由被調用,我想顯示所有用戶的事件。
#config/routes.rb
get '/:website', :controller => 'static_pages', :action => 'vanity'
#app/controllers/static_pages_controller.rb
def vanity
@user = User.find_by_website(params[:website])
if @user != nil #in case someone puts in a bogus url I redirect to root
@events = @user.events
else
redirect_to :root
end
end
#app/views/static_pages/vanity.html.erb
<h1><%= @user.website %> events</h1>
<table>
<tr>
<th>Title</th>
<th>Starts at</th>
<th>Description</th>
<th></th>
<th></th>
<th></th>
</tr>
<% @events.each do |event| %>
<tr>
<td><%= event.title %></td>
<td><%= event.starts_at %></td>
<td><%= event.description %></td>
</tr>
<% end %>
</table>
我認爲這是一個很好的選擇,如果你不想使用寶石。
- 1. 如何在non rails應用程序中實現erb partials?
- 2. 如何在Rails 3應用程序中實現更快搜索(Rails 3應用程序中鍵入(SAYT)api)
- 3. 如何在java web應用程序中創建虛榮URL?
- 4. 如何在Rails應用程序中配置虛擬文件夾?
- 5. 實現Coffeescript到Rails應用程序
- 6. 爲Rails應用程序實現API
- 7. 使用Websockets在Rails應用程序中實現自動保存
- 8. 在現有Rails應用程序中嵌入React應用程序
- 9. 如何實現谷歌地圖到我的Rails應用程序?
- 10. 使用setInterval在挖空應用程序中輪詢實現?
- 11. AuthenticationManager實現如何在SpringBoot應用程序中實例化
- 12. 如何在現有的Rails應用程序中使用gRPC
- 13. 在Rails應用程序中實現規則引擎
- 14. 在Ruby on Rails 3應用程序中實現搜索?
- 15. 在Rails應用程序中實現「記住我」
- 16. 在Rails應用程序中實現類似Gmail的標籤
- 17. 無法在Rails 4.2應用程序中實現recaptcha gem選項
- 18. 在Rails應用程序中實現鏈接列表堆棧
- 19. 在Rails應用程序中實現投票的最佳方式?
- 20. 如何實現應用程序協議
- 21. 如何實現SQLite到應用程序?
- 22. 如何實現應用程序更新?
- 23. 如何實現提醒應用程序?
- 24. 如何在社交應用程序的Rails 3中實現友誼模型?
- 25. 在我的iphone中實現空閒時間應用程序
- 26. 在iphone應用程序中實現應用程序細化
- 27. rails實時應用程序
- 28. 在Java應用程序中實現Growl
- 29. 在Android應用程序中實現Leadbolt
- 30. 在ASP.Net應用程序中實現HPKP
只要確保如果您選擇使用虛榮寶石,就可以知道在redirect_to中的vanities_controller.rb中存在vulrenability,只需添加:only_path => true,您應該是好的 – dennis 2012-08-01 14:53:54