2

我一直想知道的是在 Rails 中为同一资源创建不同索引视图的最佳方法。

例如,假设您有一组用户,并且用户控制器的当前索引操作生成用户的表格视图。然后,您要创建第二个索引视图,在地图上绘制所有用户。最好的方法是在用户控制器中创建一个新操作,还是创建一个具有新索引的新控制器(如 UsersMap)?

想法赞赏...

我的路由文件如下所示:

resources :users, :only => [:index, :index_with_map, :show, :edit, :update] do 
     match '/index_with_map' => 'users#index_with_map' 
end 

但是点击“users/index_with_map”会导致:

ActiveRecord::RecordNotFound at /admin/users/index_with_map Couldn't find User with id=index_with_map
4

2 回答 2

1

您可以将该操作添加到 UsersController,但如果您要拥有更多操作,包括用户和地图,您可能想要考虑制作一个新控制器(以符合单一职责原则)。

从指南:

如果您发现自己在资源丰富的路线中添加了许多额外的操作,那么是时候停下来问问自己是否在掩饰其他资源的存在。

你可以这样做:

resources :users do
  collection do
    get 'index_with_map'
  end
end

这将使 Rails 能够通过 GET 识别路径,例如 /users/index_with_map。

于 2013-03-19T12:30:08.943 回答
0

最好的方法是添加将处理用户地图的新操作。然后您只需要为该操作创建相应的视图文件。

用户是同一张桌子,只是功能不同。那么为什么需要不同的控制器呢?

此外,如果您仅为地图视图创建另一个控制器,那么它就没有用处,因为它只是浪费资源。

还有一点是——

控制器提供用户与模型交互。因此,两个控制器意味着您通常需要两个模型。因此,当您想做不同(类别)的事情时,会使用不同的控制器。

于 2013-03-19T12:34:43.290 回答