【问题标题】:Many to many relationship alias多对多关系别名
【发布时间】:2020-01-04 20:03:15
【问题描述】:

我有一个用户模型和一个任务模型。

任务:

class Task < Sequel::Model
  include ActiveModel::Serialization
  many_to_one :subject, polymorphic: true
  many_to_one :creator, key: :created_by, class: :User

  def_dataset_method(:sort_recent) do
    order(Sequel.desc(:created_at), Sequel.desc(:id))
  end

end

用户:

class User < Sequel::Model
  include ActiveModel::Serialization

  one_to_many :task
end

现在我希望用户能够创建任务并将其分配给其他多个用户,但我很困惑最好的方法是什么(我猜是通过连接表)以及我是否需要另一个模型.

【问题讨论】:

  • TaskUser 可能是最明显的。
  • @JoshBrody 用户既是创建者,也可以是另一个用户被分配任务。

标签: ruby-on-rails ruby sequel


【解决方案1】:

在续集many_to_many 创建many to many associations 没有模型(但当然有一个连接表)。这相当于 ActiveRecord 中的has_and_belongs_to_many。

DB.create_table :assignments do
  primary_key :id
  foreign_key(:user_id)
  foreign_key(:task_id)
end

class Task
  many_to_many :assigned_users, 
    class: :User, 
    join_table: :assignments,
    right_key: :user_id # this might not be needed
end

class User
  many_to_many :assigned_tasks, 
    class: :Task,
    join_table: :assignments,
    right_key: :task_id
end

【讨论】:

    【解决方案2】:

    您很可能需要一个关联表,例如 task_users,其中包含 user_id 和 task_id 列。这允许Task 拥有has_many :assignees, through: :task_users 关联。 User 的反向关联也可以实现。

    https://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

    【讨论】:

    • 这是一个后续问题 - 不是 ActiveRecord。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 2018-06-15
    • 2012-08-21
    相关资源
    最近更新 更多