【问题标题】:Rails ActiveRecord Associations that include "owner" role包含“所有者”角色的 Rails ActiveRecord 关联
【发布时间】:2018-05-19 23:45:08
【问题描述】:

我正在创建一个家务跟踪应用程序作为我的第一个 Rails 项目,我想知道我创建的关联是否有意义或可以改进。以下是应用程序的详细信息:

  • 用户制作了一份杂务清单,并成为该清单的“所有者”(即“管理员”) 该列表。
  • 所有者可以为列表创建/编辑杂务。他们还可以“批准”其他用户完成列表中的任务。这些用户只能完成任务。
  • 拥有者除了通常的管理能力外,还可以完成 他们拥有的列表中的任务。
  • 所有者可以拥有多个列表。用户可以被批准完成 多个列表中的任务。

以下是我粗略得出的关系,我正在寻找反馈:

(模型)用户

  • has_many :lists
  • has_many :owners, class_name: “List”, foreign_key: “list_id”
  • has_many :chores, through: :lists

(模型)列表

  • has_many :users
  • has_many :家务
  • belongs_to :owner, class_name: “User”, foreign_key: “owner_id”

(模型)用户列表

  • belongs_to :user
  • belongs_to :list

(模特)家务

  • belongs_to :list
  • has_many :users, through: :lists

任何危险信号?提前谢谢!

【问题讨论】:

    标签: ruby-on-rails activerecord rails-activerecord


    【解决方案1】:

    我会这样做:

    # user.rb
    class User
      has_many :lists_users
      has_many :lists, through: :lists_users
      has_many :chores, through :lists
    end
    
    # list.rb
    class List
      has_many :lists_users
      has_many :users, through: :lists_users
      has_many :chores
    end
    
    # lists_user.rb
    class ListsUser
      belongs_to :user
      belongs_to :list
    
      # field (Representational, add it in database)
      :user_role
        - member (can view)
        - collaborator (can mark complete)
        - owner (can do everything)
    end
    
    # chore.rb
    class Chore
      belongs_to :list
    end
    

    注意:我根据 Rails 命名约定将关联模型更改为 ListsUser

    如果我遗漏了什么,请告诉我。

    【讨论】:

    • 这是有道理的。只是为了确保我理解,因为一个用户可以属于许多列表,但该列表只有一个角色,我可以将角色列添加到 ListUsers 而不是 User?
    • 是的,这正是我在 ListUsers 中添加角色列的原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-23
    相关资源
    最近更新 更多