路由文件的灵活性如何

时间:2013-02-26 15:23:50

标签: ruby-on-rails ruby-on-rails-3.2

如果我所做的任何假设是错误的,请纠正我,但这是我的想法:

当我们在路线文件中使用新的“资源”时,要让我们说新的GET REST API,最好还使用新的“控制器 “为那个资源。

现在,当我们使用新控制器时,我们还会根据该控制器的名称获得新的默认路由这是我的问题开始的地方:)

我已经有了控制器和GET REST,例如我有一个health_mamagment控制器,然后是/health_managment/id.json

这样的网址

所以现在当我在这个URL上时,它有几个导航链接 - 比如Windows Apps中的选项卡 - 所以用户可以点击其他链接并需要查看一些新数据。 (仍然是相同的WorkFlow,他只是想看到一些新数据)。

所以我在这里调用一个新的GET REST API来获取链接的新数据,例如名为Payers

/health_managment/id/payes这样的网址有意义吗?

但是,如果我们为这个新的“付款人”视图创建一个新的控制器和资源,那么在路径文件中我可以以某种方式使用“as”关键字吗?并将新路线映射为/health_managment/id/payes

2 个答案:

答案 0 :(得分:3)

您可以在路径文件中嵌套资源并指定要使用的控制器:

 # /config/routes.rb
 resources :health_managment do
   resources :payes, :controller => "Payer" do
     member do
       # Your custom routes
     end
   end
 end

这将导致您可以使用该URL / health_managment / ID / payes

作为对“付款人”控制器的访问权限。

使用:因为不会修改URI端点,但会修改命名助手,如下所示: http://guides.rubyonrails.org/routing.html在第4节。

根据评论中的要求,以下是对“成员”部分的更深入了解:

 # /config/routes.rb
 resources :posts do
   get 'recent'
   member do
       get 'abstract'
   end
 end

将生成自定义网址:

  • GET / posts / recent将显示 帖子列表。您正在将网址链接到帖子集合
  • GET / posts /:id / abstract将以其他方式显示一个帖子(指定ID)

或者,你可以像这样编写这条路线:

 # /config/routes.rb
 resources :posts do
   get 'recent', :on => :collection
   get 'abstract', :on => :member
 end

当你声明子资源时,它们被设置在“成员级别”,因此:

 # /config/routes.rb
 resources :posts do
   get 'recent', :on => :collection
   get 'abstract', :on => :member
   resources :comments do
      # Routes again
   end
 end

将允许您访问URI / posts /:id / comments并从那里定义自定义路由

答案 1 :(得分:1)

是的,您提出的网址确实有意义,但您在路径文件中映射的方式取决于您的health_management资源与付款人资源之间的关系。

如果两者之间存在has_many / belongs_to关系,我建议您查看nested resources。您也可以使用以下路线手动执行此操作:

get '/health_managment/:id/payers' => 'payers#index'

在付款人控制器文件中,您可以进行以下索引操作:

def index
  @health_managment = HealthManagment.find(params[:id])
  @payers = @health_managment.payers
end

如果您正在使用API​​,那么将其限制为通常的REST结构是有意义的,为此,嵌套资源运行良好。