我希望用户能够在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