Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.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 on rails 双嵌套路由_Ruby On Rails - Fatal编程技术网

Ruby on rails 双嵌套路由

Ruby on rails 双嵌套路由,ruby-on-rails,Ruby On Rails,目前我有属于程序的步骤: map.resources :procedures, :has_many => :steps 这对我来说很好,我得到的URL看起来像/procedures/3/steps/5 但是,假设我想再添加一层,即属于步骤的图形,以获得此:/procedures/3/steps/5/Figures/1 这是一个怪物的网址放在一边,我到底该如何做这个路由 编辑:也许我不应该把它放在一边,我应该这样做吗?图形只是我将在步骤中显示的图像的容器,因此用户不会真正“访问”任何图形,

目前我有属于程序的步骤:

map.resources :procedures, :has_many => :steps
这对我来说很好,我得到的URL看起来像/procedures/3/steps/5

但是,假设我想再添加一层,即属于步骤的图形,以获得此:/procedures/3/steps/5/Figures/1

这是一个怪物的网址放在一边,我到底该如何做这个路由


编辑:也许我不应该把它放在一边,我应该这样做吗?图形只是我将在步骤中显示的图像的容器,因此用户不会真正“访问”任何图形,我只需要从图形中获取图像。

这比我可以从头顶上更好地解释这一点。基本上,你可以在定义路线时使用来实现你想要的目标。

这比我一下子就能理解得更好。基本上,你可以在定义路线时使用来实现你想要的目标。

从你的评论中,我认为你是对的:你永远不需要路线到数字。。。你永远不会想不必要地把你的路线复杂化

听起来你要走的最远的一步就是表演动作。。。您只需向ActiveRecord请求该步骤的数字列表。也就是说,你会有

class Step < ActiveRecord::Base
  has_many :figures
end
类步骤

类图

但是对于路由,您只需要关心RESTfully请求的资源——在这种情况下,它看起来像是您的
过程
,以及它们相关的
步骤
。你在问题中列出的路线对我来说很合适

从你的评论来看,我认为你是对的:你永远都不需要去看数字。。。你永远不会想不必要地把你的路线复杂化

map.resources :procedures do |procedure|
  procedure.resources :steps do |step|
    step.resources :figures
  end
end
听起来你要走的最远的一步就是表演动作。。。您只需向ActiveRecord请求该步骤的数字列表。也就是说,你会有

class Step < ActiveRecord::Base
  has_many :figures
end
类步骤

类图
但是对于路由,您只需要关心RESTfully请求的资源——在这种情况下,它看起来像是您的
过程
,以及它们相关的
步骤
。你在问题中列出的路线对我来说很合适

map.resources :procedures do |procedure|
  procedure.resources :steps do |step|
    step.resources :figures
  end
end
如果您需要像/Figure/这样的路线,请使用:

map.resources :procedures, :shallow => true do |procedure|
  procedure.resources :steps do |step|
    step.resources :figures
  end
end
在你看来,这有点像:

<%= link_to "Figure", figure_url(@procedure, @step, @figure) -%>

如果您需要像/Figure/这样的路线,请使用:

map.resources :procedures, :shallow => true do |procedure|
  procedure.resources :steps do |step|
    step.resources :figures
  end
end
在你看来,这有点像:

<%= link_to "Figure", figure_url(@procedure, @step, @figure) -%>


根据那篇文章,我不应该这样做,而是应该这样做:map.resources:steps,:has_many=>:figures。但是,假设用户永远不会实际访问该图,但这些图将只按步骤使用。我还是应该把它分开,还是可以把它作为一个巨大的双重嵌套的东西?根据那篇文章,我不应该这样做,而是应该这样做:map.resources:steps,:has_many=>:figures。但是,假设用户永远不会实际访问该图,但这些图将只按步骤使用。我还是应该把它分离出来,还是可以把它作为一个巨大的双嵌套的东西?正如你们所知道的,URI表示与REST是正交的。此外,如果您对同一资源的子集有不同的URI(并且使用相同的媒体类型),那么您可能违反了REST约束。对于属于步骤的图形,沿着/figures/1?step=5的行可能更好。正如您所知,URI表示与REST正交。此外,如果您对同一资源的子集有不同的URI(并且使用相同的媒体类型),那么您可能违反了REST约束。对于属于步骤的图形,沿着/figures/1?step=5的行可能更好。