如何在Rails应用程序中实现个性化URL?

问题描述 投票:9回答:2

我希望用户能够在site.com/myNameHere上拥有个人资料页面。 Rails寻找一个名为“ myNameHere”的控制器。是否可以设置routes.rb,以便在找不到控制器时将“ myNameHere”作为参数发送到另一个控制器?

ruby-on-rails url routes url-routing
2个回答
9
投票

您可以添加这样的路线:

map.profile_link '/:username', :controller => 'profiles', :action => 'show'

请确保将其添加到文件中资源下方的足够低的位置,以免干扰其他路由。它应该是最低优先级。接下来,您需要将您的显示操作更改为使用用户名而不是ID:

def show
  @user = User.find_by_username(params[:username])
end

这就是全部。编码愉快!

UPDATE:

我已将此答案扩展为完整的博客文章Vanity URLs in Ruby on Rails Routes。我还有其他代码示例和更详尽的说明。


0
投票

[只是以为我会为Rails 3进行更新。在我的用户模型中,我有一个字段'website'将充当虚荣路线,并且我将为每个虚荣路线路由到静态页面。如果要调用虚荣路由,我想显示所有用户的“事件”。

#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>

我认为如果您不想使用宝石,这是一个很好的选择。

© www.soinside.com 2019 - 2024. All rights reserved.