如何解决处理ActiveRecord关联关系
我目前正在进行重构,以将关系从一个->许多调整为许多->许多。由于各种原因,我们需要保留现有关系的某些部分,这样我们才能维护现有合同。
为了进行故障排除,我们将这些模型称为Task
和Team
,并考虑Team
和Member
之间的其他1:多关系。给出以下内容:
class Task < ApplicationRecord
belongs_to :team
has_one :captain,-> {//some join/ordering code},through: :team,source: :members
end
class Team < ApplicationRecord
has_many :tasks
has_many :members
belongs_to :team_type
end
目标是仍然坚持team
的想法,而是根据某些条件(在这种情况下,团队的类型是这是另一种关系)。我目前的方法是为teams
和team
定义自定义函数,但这并不理想,因为ActiveRecord的大部分功能都已丢失。速度也是一个问题,因为这是应用程序中的关键关系。
我现在有:
team_id
class Task < ApplicationRecord
has_many :tasks_teams
has_many :teams,through: :task_teams
end
class TasksTeam < ApplicationRecord
belongs_to :task
belongs_to :team
validates :task_id,presence: true
validates :team_id,presence: true
end
到目前为止,我已经尝试过类似以下操作:
class Team < ApplicationRecord
has_many :tasks_teams
has_many :tasks,through: :task_teams
has_many :members
belongs_to :team_type
end
在上面,class Task < ApplicationRecord
has_many :tasks_teams
has_many :teams,through: :tasks_steams
has_one :head_team,-> (task) {joins(:tasks_teams).where(task_id: task.id)},class_name: 'Team'
has_one :captain,source: :members
end
返回以下SQL错误:
task.head_team
目前,省略了团队类型,但是我目前的计划是添加一个布尔字段ActiveRecord::StatementInvalid (PG::UndefinedColumn: ERROR: column teams.task_id does not exist)
LINE 1: ...teams"."task_id" = "teams"."id" WHERE "tea...
^
: SELECT "teams".* FROM "teams" INNER JOIN "tasks_teams" ON "tasks_teams"."team_id" = "teams"."id" WHERE "teams"."task_id" = $1 AND "tasks_teams"."task_id" = $2 LIMIT $3
,以指定一个团队满足在tasks_teams
关系中被选中的要求。允许一条记录的值为team
。
最终目标概述:
-
true
返回所有task.teams
至teams
-
tasks_teams
通过task.team
返回一个team
到我们的单例布尔值列中,值为tasks_teams
(例如,您可以称为true
) ,但是如果我们可以取消is_scheduled
上team_type
的现有关系,那就更好了
非常感谢您的阅读,感谢您提供的任何帮助!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。