获取与堆栈溢出相同的url结构



SO上的一个问题具有以下url结构:

http://stackoverflow.com/questions/18474799/changing-the-input-value-in-html5-datalist

如果我们假设数字部分是ID,则前两个部分(在域扩展之后)可以通过在routes.rb 中简单地使用以下内容来获得

resources :questions

这个问题已经通过它的ID来识别了,那么我们如何以最简单的方式添加(可选)装饰条呢?我们需要使用一个新的链接助手(并包括额外的参数),还是可以在其他地方解析3段url?

更新:

为了将这个问题更多地集中在路由处理上,让我们假设对象上已经保存了一个段塞(在创建时)作为属性,例如@question.slug

如果routes.rb或/和控制器中的规则能够启用和处理可选的段塞,而不必在所有视图中编写长链接帮助程序,那将是一个真正的优势。

resources :questions do
  member: title
end

对于slug,请使用friendly_id,是的,不要忘记查看Rails Routing

您可以使用to_param方法来创建一个"友好id"。

类似这样的东西:

class Question < ActiveRecord::Base
  def to_param
    [id, name.parameterize].join("/")
  end
end

更多信息在此要旨

如果您只想以这种方式处理GET请求,那么很容易做到:

get '/questions/:id/:title' => 'questions#show',  as: :question_with_title
resources :questions

通过这种方式,您可以处理带有或不带有标题的传入URL(就像StackOverflow一样——试试吧!)。您可以使用以下内容动态创建url:

question_with_title_path(@question.id, @question.title.to_s.downcase.gsub(/ /, '-')
# probably will want to use a method for processing titles into url-friendly format

更多信息,请访问http://guides.rubyonrails.org/routing.html#static-分段

最新更新