0

我正在制作一个 Rails 4 应用程序,我有一个BookingsController. 我的应用程序有两种类型的用户 -admins并且guests两者都需要能够查看booking- 但是,根据查看预订的用户类型,视图会有很大不同。

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

有没有更好的方法来解决这个问题?- 更好的意思是有没有办法让guestsRESTful也有?

4

1 回答 1

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 是一种单一继承语言,所以如果您已经从一些公共父控制器继承这些控制器,那么使用模块方法可能会更加灵活。

于 2013-10-27T20:31:39.770 回答