我正在开发一款预订应用程序(如爱彼迎),用户可以在其中列出他们的房屋,并接收其他用户的预订查询。
有一个用户模型,可以有不同的角色:主机、访客、管理员。
对于这个应用程序,我想为主人和客人显示不同的注册页面。
我可以使用设备轻松实现这一点吗?
到目前为止,我得到了一个可行的解决方案,但它看起来过于复杂,而且我很确定我错过了一些东西。
# routes.rb
devise_for :users
devise_for :users, path_prefix: 'hosts', module: 'hosts', as: 'hosts', only: [:registrations]
# registrations_controller.rb
class Hosts::RegistrationsController < Devise::RegistrationsController
prepend_before_action :configure_permitted_parameters
# copying most of the parent logic
def create
build_resource(sign_up_params)
resource.save
yield resource if block_given?
if resource.persisted?
# copy of parent logic
...
else
clean_up_passwords resource
set_minimum_password_length
# ---> custom logic
render :new, status: :unprocessable_entity
end
end
def resource_name
:user
end
end
如here所述,您可以通过在
devise_for
中使用namespace
方法来嵌套您的设备控制器:
# config/routes.rb
devise_for :users, skip: [:registrations]
namespace :host do
devise_for :users, only: [:registrations]
end
namespace :guest do
devise_for :users, only: [:registrations]
end
它将生成您需要的路线:
POST /host/users
-> Host::RegistrationsController#create
POST /guest/users
-> Guest::RegistrationsController#create