Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 凌驾;“显示”;Rails中的资源路由_Ruby_Ruby On Rails 3.2 - Fatal编程技术网

Ruby 凌驾;“显示”;Rails中的资源路由

Ruby 凌驾;“显示”;Rails中的资源路由,ruby,ruby-on-rails-3.2,Ruby,Ruby On Rails 3.2,也就是说,有一个路由/some_resource/:id 实际上,某些资源的:id将始终存储在会话中,因此我想用/some\u resource/:id覆盖路径/some\u resource/my。或者我想用/some\u resource/覆盖它,并删除用于索引操作的路径GET/some\u resource/ 如何实现这两个目标?在您的路线中。rb put: resources :some_resource 在行之前 get "some_resource" => "some_res

也就是说,有一个路由
/some_resource/:id

实际上,
某些资源的
:id
将始终存储在会话中,因此我想用
/some\u resource/:id
覆盖路径
/some\u resource/my
。或者我想用
/some\u resource/
覆盖它,并删除用于索引操作的路径GET
/some\u resource/

如何实现这两个目标?

在您的路线中。rb put:

resources :some_resource
行之前

get "some_resource" => "some_resource#show"
然后rails将在找到资源之前获取您的“get”。。。从而覆盖get/some\u资源

此外,您还应指定:

resources :some_resource
尽管如前所述,rails不会接受它,但这是一个很好的实践

效果很好(我使用这种方法已经有一段时间了),但是有一种标准化的方法。在这种情况下,最好使用收集路线

resources :some_resource, :except => :index do
  get 'some_resource', :on => :collection, :action => 'show'
end
收集路由的存在使得Rails不会假定您正在指定一个资源
:id
。在我看来,这比在
routes.rb
文件中使用优先级重写路由要好

resources :some_resource, :except => :index
如果需要指定多个收集路线,则首选使用块

resources :some_resource, :except => :index do
  get 'some_resource', :on => :collection, :action => 'show'
end

我不确定您的资源是什么,但听起来它可能是一个单一的资源,在这种情况下,您可以将其设置为
resource:some_resource
?这里有更多关于奇异资源的信息:如果你感兴趣的话。我看到了。这对我没有帮助。