Ruby on rails rails中的路由-何时路由到crud方法以及何时使用给定参数路由
我需要一些关于在rails中布线的帮助。传统上,如果我在routes.rb中有路线 资源:类别 它将匹配www.website.com/categories/id,因为id是一个整数。但是,如果我想路由到一个特定的用户或类别,会发生什么呢 www.example.com/categories/apple 而不是传统的: www.example.com/categories/4 我目前在routes.rb中有这两行代码 匹配“类别/:名称”=>“类别#显示” 资源:类别 因此www.example.com/categories/apple将正确路由到categories控制器中的show方法 但是 如果我想创建一个新类别怎么办?问题出在这里 www.example.com/categories/new 将路由到show方法,而不会路由到new方法 我可以在show方法中放置if语句checking is params[:name]==new,但是我觉得必须有更好的方法来解决这个问题 我的最终目标是基于类别字符串(apple)而不是基于它的ID(4)进行路由,但也能够创建、更新和销毁类别 有什么建议吗Ruby on rails rails中的路由-何时路由到crud方法以及何时使用给定参数路由,ruby-on-rails,ruby,routing,Ruby On Rails,Ruby,Routing,我需要一些关于在rails中布线的帮助。传统上,如果我在routes.rb中有路线 资源:类别 它将匹配www.website.com/categories/id,因为id是一个整数。但是,如果我想路由到一个特定的用户或类别,会发生什么呢 www.example.com/categories/apple 而不是传统的: www.example.com/categories/4 我目前在routes.rb中有这两行代码 匹配“类别/:名称”=>“类别#显示” 资源:类别 因此www.example
谢谢 您可以将名称作为参数传递,例如,您可以尝试
链接到类别路径(category.name)
而不是链接到类别路径(category)
它将转到categories#show in controller,路径看起来像example.com/categories/categorinName,在categories controller的show操作中,params[:id]将具有名称,您将需要如下内容
Category.find\u by_name params[:id]
而不是Category.find params[:id]
希望这对您有所帮助。正如@pdoherty926在评论中所说,您可以使用FriendlyId。如果要手动管理,不必覆盖路由,只需将所需代码放入
:show
操作:
class CategoriesControllers < ...
...
def show
if /^\d+$/ =~ params[:id]
# ... normal workflow for integer id
elsif /soe_regexp_that_matches_names>/
# ... do your thing with names
else
raise 404
end
end
...
end
类别控制器
。。。
...
def秀
if/^\d+$/=~params[:id]
# ... 整数id的正常工作流
匹配名称的elsif/soe\u regexp\u>/
# ... 用名字做你的事
其他的
提高404
结束
结束
...
结束
我认为最简单的方法是,按照您的方式,在开始之前定义一条路线
match 'categories/:name' => 'categories#show'
像这样:
match 'categories/new' => 'categories#new'
match 'categories/:name' => 'categories#show'
秩序很重要 您是否考虑过使用Gem-like?afaik,match在rails 4中被弃用,并被相应的动词替换(在本例中为'get')@RobinR.Winton:shure,但我不知道rails的版本,示例使用的是
match
。所以我猜,这将是另一个rails版本。如果代码中有指向rails 4的提示。我错过了:)