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-分段