2

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

当我们在路由文件中使用一个新的“资源”时,假设有一个新的 GET REST API,最好也为该资源使用一个新的“控制器”。

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

我已经有一个控制器和一个 GET REST,所以例如我有一个health_mamagment控制器,然后是一个类似的 URL/health_managment/id.json

所以现在当我在那个 URL 上时,它还有几个导航链接——比如 Windows 应用程序中的选项卡——所以用户可以点击其他链接并需要查看一些新数据。(仍然是相同的工作流程,他只是想看看一些新数据)。

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

那么像这样的 URL/health_managment/id/payes 有意义吗?

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

4

2 回答 2

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

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

使用 :as 不会修改 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 应该显示一个帖子列表。您正在将 url 链接到帖子集合
  • 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 并从那里定义自定义路由

于 2013-02-26T15:43:22.200 回答
1

是的,您提出的 URL 确实有意义,但您如何在路由文件中映射它取决于您的 health_management 资源和 payers 资源之间的关系。

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

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

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

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

但是,如果您正在使用 API,则将其限制为通常的 REST 结构是有意义的,为此,嵌套资源可以很好地工作。

于 2013-02-26T15:32:33.307 回答