多对多关系别名
Many to many relationship alias
我有一个用户模型和一个任务模型。
任务:
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
现在我希望用户能够创建任务并将其分配给多个其他用户,但我很困惑最好的方法是什么(我想是通过加入 table),如果我是否需要其他模型。
您很可能想要一个关联 table,例如 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
In Sequel many_to_many
在没有模型的情况下创建 many to many associations(当然有连接 table)。这相当于 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
我有一个用户模型和一个任务模型。
任务:
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
现在我希望用户能够创建任务并将其分配给多个其他用户,但我很困惑最好的方法是什么(我想是通过加入 table),如果我是否需要其他模型。
您很可能想要一个关联 table,例如 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
In Sequel many_to_many
在没有模型的情况下创建 many to many associations(当然有连接 table)。这相当于 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