(修订整件事)
如果你想允许动态的匹配与正常宁静的行车路线,有几个选项 - (把它放在你的路由年底或者它会匹配一切)
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网址,试试这个:https://github.com/norman/friendly_id
我认为它必须认识到,人们一般不用手操作的URL,其不错的可读性但对于他们要清楚他们在做什么/去哪里,他们更重要。
为了回应您的评论,我认为您误导了路由。如果您制作了两条路线:category
和:page
,则它们与完全相同的网址匹配,但其中一条将其存储在params[:category]
中,另一个存储在params[:page]
中。为了区分它,您需要具有不同数量的参数,比如:category/:product
或命名空间,或者可能是指定路由路由到的MVC的安静路由。
你能发表一些代码吗?您的routes.rb文件将很好启动。 – JGrubb 2012-08-07 12:11:38
我的路线是无用的。这是想法: 1)我将query_string传递给模型(URL映射器) 2)它返回控制器和动作 我找到了一种方法来做到这一点,通过简单地创建每个单一的可能性使用每个例如。对于每个类别我创建一个马赫 但是这种方式真的很慢,因为每次我点击链接时都会产生匹配。可能这不会发生在使用乘客的生产中,但我不能承担这种风险。 你有没有尝试过这样的事情? – 2012-08-07 15:34:40
我不明白你为什么认为你的路线是无用的。您不应该循环遍历每个可能的类别来查找匹配,这就是路由文件的用途,类似于'get':路径文件中的category'=>'products#category''应该可以让您到达那里。问题是路由文件是从上到下读取的,因此当您想要更符合用户需求的标准URL或更少的标准URL进行匹配时,请牢记这一点。 – JGrubb 2012-08-07 17:32:54