0

我试图做几个小时的事情,但我被铁路路线困住了。

所以.. 这个想法是有一些更加用户友好的 URL,例如 /Laptops 用于类别和 /Laptops/Apple-MacBook-Air-and-so-on。我还应该将此类链接用于 /MyDummyPage 等简单页面。

所以我的想法是获取 request_url 并检查我是否可以自己找到该页面。但似乎 rails 在定义路由之后和调用控制器之前正在初始化这个请求类。

如您所见,我被卡住了,看不到任何可能的解决方案。如果有人可以帮助我,我会很高兴。

先感谢您。一切顺利!

4

1 回答 1

0

(整件事修改了)

如果您想允许动态匹配以及正常的宁静路线,有几个选项 - (将其放在路线的末尾,否则它将匹配所有内容)

match '*raw' => 'dynamic#show'

在 dynamic_controller.rb

def show
  parts = params[:raw].split '/'
  # do logic here to set all variables used in views
  render @resource_or_page
end

您还可以在搜索功能中使用输入并重定向到该搜索的第一个结果。如果没有结果,则返回 404。

def show
  results = search_method_here params[:raw].sub('/', ' ')
  if results.any?
    redirect_to results.first        
  else
    raise ActionController::RoutingError.new 'Not Found'
  end
end

此外,对于宁静路线中的 freindlier url,试试这个:https ://github.com/norman/friendly_id


我认为重要的是要意识到人们通常不会手动操作 URL,拥有可读的 url 很好,但更重要的是让他们清楚自己在做什么/去哪里。

针对您的评论,我认为您在路由方面存在误导。如果您创建 2 条路线:category:page,它们匹配完全相同的 url,除了其中一个将其存储params[:category]params[:page]. 为了区分它,您需要匹配不同数量的参数,例如:category/:product命名空间或命名空间,或者可能是指定路由路由到的 MVC 的 restful 路由。

于 2012-08-07T15:29:48.673 回答