首页 > 解决方案 > 多对多关系别名

问题描述

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

任务:

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

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

标签: ruby-on-railsrubysequel

解决方案


在 Sequel中many_to_many创建 了多对多的关联 ,没有模型(但当然有一个连接表)。这相当于has_and_belongs_to_many在 ActiveRecord 中。

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

推荐阅读