【问题标题】:How to implement Rails associations when using roles instead of multiple models for user types如何在使用角色而不是用户类型的多个模型时实现 Rails 关联
【发布时间】:2012-02-07 08:13:20
【问题描述】:

我需要一些关于以下最佳方法的建议。

我的应用程序中曾经有 Tutor、Student、Reservation 模型。

我想要一个包含一名导师和一名学生的预订。

目前我正在使用 devise 进行用户身份验证,我喜欢使用通用用户的想法,并为用户定义角色,就像许多人使用 devise 和 cancan 所做的那样。例如,它可以轻松创建管理员角色。 因此,我可以在 User 中担任 Tutor 或 Student 角色。

现在我的问题是我不能再以我想要的方式使用关联,例如

Reservation
  belongs_to :Tutor
  belongs_to :Student

因为我不再为每种类型的用户提供单独的模型。

我该怎么办?

我发现如果我有单独的导师和学生模型,那么在设计中我需要单独的链接来登录和编辑每种类型的用户。

添加一些类似问题的链接

Multipe relationships in Rails where the class name does not match the association name

【问题讨论】:

    标签: ruby-on-rails devise associations roles cancan


    【解决方案1】:

    只需覆盖类名即可使用“用户”:

    class Reservation < ActiveRecord::Base
      belongs_to :tutor, :class_name => "User"
      belongs_to :student, :class_name => "User"
    end
    

    【讨论】:

    • 我刚刚尝试过这个建议。但是,如果我尝试 Reservation.find(7).student 我收到错误 NoMethodError: undefined method 'student'
    • 你能确认你在 :reservations 表上有一个 :student_id 字段吗?另外,你是直接使用标准的 rails 模型,还是需要类挂钩的插件,比如 spree?
    • 是的,该字段存在并且由我填充。当我创建预订时,我将其设置如下 '@reservation.student = current_user' 然后我可以使用以下 'Reservation.find(9).student_id' 访问 id,但 'Reservation.find(9).student' 不能工作。
    • app/models 目录下的 reservation.rb 文件中的“belongs_to”代码是什么?我只是问,因为 NoMethod 错误会推断没有调用 'belongs_to' 语句。
    • 是的,我刚刚确认它在哪里。不知道出了什么问题。有没有像 jsFiddle 这样的网站,人们可以在其中测试代码 sn-ps?
    猜你喜欢
    • 2020-07-17
    • 2021-09-02
    • 2013-12-27
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多