我正在制作一个Rails 4应用,我有一个BookingsController
。我的应用有两种类型的用户 - admins
和guests
,两者都需要能够查看booking
- 但是,根据用户的类型,视图会有很大差异正在查看预订。
目前我正在admins
使用标准RESTful方法,并在GuestController
guests
查看预订时使用我自己的操作。
有没有更好的方法解决这个问题? - 更好的是,我的意思是有一种方法可以使guests
RESTful吗?
答案 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是一种单一的继承语言,所以如果你已经从一些常见的父控制器继承这些控制器,那么可能采用模块方法会更灵活。