簡體   English   中英

如何在 Rails 應用程序中實現虛 URL?

[英]How can I implement vanity URL's in a Rails application?

我希望用戶能夠在 site.com/myNameHere 上擁有個人資料頁面。 Rails 查找名為“myNameHere”的控制器。 是否可以設置 routes.rb 以便如果未找到控制器,“myNameHere”將作為參數發送到另一個控制器?

您可以添加這樣的路線:

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

確保將它添加到文件中足夠低的位置,在您的資源下方,以免干擾其他路由。 它應該是最低優先級。 接下來,您需要更改 show 操作以使用用戶名而不是 id:

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

這里的所有都是它的。 快樂編碼!

更新:

我已將此答案擴展為完整的博客文章, Ruby on Rails Routes 中的虛名 URL 我有額外的代碼示例和更詳盡的解釋。

只是想我會為 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>

如果您不想使用 gem,我認為這是一個不錯的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM