具有两个用户模型的邮箱程序

Mailboxer with two user models

我使用 Devise 进行用户身份验证并创建模型、学生和教师。现在,我想使用邮箱。使用邮箱,我们只需要将 acts_as_messageable 添加到两个模型。但是,我不太确定如何设置控制器。这是我当前的控制器:

class ConversationsController < ApplicationController
  before_action :authenticate_student!
  before_action :authenticate_teacher!
  before_action :get_mailbox

  def index
    @conversations = @mailbox.inbox.paginate(page: params[:page], per_page: 10)
  end

  private

  def get_mailbox
    @mailbox = current_student.mailbox || current_teacher.mailbox
  end
end

有没有什么方法可以将学生和教师模型组合到一个范围内,比如将它们捆绑在一起,这样我们就可以调用 "user" 来获得两个模型?欢迎任何其他解决方案。

如果您有两个 Devise 模型,定义自定义 current_user 方法会很方便:

# in application_controller.rb
def current_user
  if current_student
     current_student
   else
    current_teacher
  end   
end
helper_method :current_user

附带说明一下,我建议您使用 Rolify + Pundit 的单个用户模型和角色进行授权。最好让 Devise 完成其身份验证工作,您可以为用户类型特定信息创建其他模型(即 student_profile.rb)。这会让你的代码更干燥,让你省去很多麻烦。