我正在制作一个 Rails 4 应用程序,我有一个BookingsController
. 我的应用程序有两种类型的用户 -admins
并且guests
两者都需要能够查看booking
- 但是,根据查看预订的用户类型,视图会有很大不同。
目前,我在查看预订时使用标准的 RESTful 方法admins
和我自己的操作。GuestController
guests
有没有更好的方法来解决这个问题?- 更好的意思是有没有办法让guests
RESTful也有?
我正在制作一个 Rails 4 应用程序,我有一个BookingsController
. 我的应用程序有两种类型的用户 -admins
并且guests
两者都需要能够查看booking
- 但是,根据查看预订的用户类型,视图会有很大不同。
目前,我在查看预订时使用标准的 RESTful 方法admins
和我自己的操作。GuestController
guests
有没有更好的方法来解决这个问题?- 更好的意思是有没有办法让guests
RESTful也有?
基本上正如 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 是一种单一继承语言,所以如果您已经从一些公共父控制器继承这些控制器,那么使用模块方法可能会更加灵活。