在Rails中共享显示路由

时间:2013-10-27 08:22:54

标签: ruby-on-rails routing ruby-on-rails-4

我正在制作一个Rails 4应用,我有一个BookingsController。我的应用有两种类型的用户 - adminsguests,两者都需要能够查看booking - 但是,根据用户的类型,视图会有很大差异正在查看预订。

目前我正在admins使用标准RESTful方法,并在GuestController guests查看预订时使用我自己的操作。

有没有更好的方法解决这个问题? - 更好的是,我的意思是有一种方法可以使guests RESTful吗?

1 个答案:

答案 0 :(得分:0)

基本上Leszek已经建议使用命名空间。如果控制器中两种情况的逻辑相同,则可以通过两种方式提取它:

像现在一样离开BookingsController并使用继承 - 让你的作用域控制器继承这个非命名空间的控制器,如下所示:

   # controllers/admin/bookings_controller.rb 
   class Admin::BookingsController < BookingsController
   end

   # controllers/guest/bookings_controller.rb        
   class Guest::BookingsController < BookingsController
   end

第二个选项是我将所有方法提取到模块(关注)

   # concerns/controllers/bookings.rb
   module Controllers::Bookings
     def show
       ...
     end
   end

   # controllers/admin/bookings_controller.rb 
   class Admin::BookingsController < ApplicationController
     include Controllers::Bookings
   end

   # controllers/guest/bookings_controller.rb        
   class Guest::BookingsController < ApplicationController
     include Controllers::Bookings
   end

两种方式都允许您覆盖具有不同逻辑的方法。有些人喜欢第一种方法,有些人喜欢第二种方法。有一点需要考虑 - Ruby是一种单一的继承语言,所以如果你已经从一些常见的父控制器继承这些控制器,那么可能采用模块方法会更灵活。