用 1 个模型和 2 个注册表进行设计

问题描述 投票:0回答:1

我正在开发一款预订应用程序(如爱彼迎),用户可以在其中列出他们的房屋,并接收其他用户的预订查询。

有一个用户模型,可以有不同的角色:主机、访客、管理员。

对于这个应用程序,我想为主人和客人显示不同的注册页面。

我可以使用设备轻松实现这一点吗?

到目前为止,我得到了一个可行的解决方案,但它看起来过于复杂,而且我很确定我错过了一些东西。

# 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
ruby-on-rails devise
1个回答
0
投票

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
  • 等等
© www.soinside.com 2019 - 2024. All rights reserved.