问题:如何将Assignments与users数组中的众多用户之一关联?
我研究了Rails指南和一些帖子,但我还没有弄明白。
http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
http://guides.rubyonrails.org/active_record_querying.html#retrieving-multiple-objects-in-batches
我正在通过两种不同的方式将用户与作业相关联。
1- user" user_id"是创建作业的人
2-分配给多个用户。用户与使用has_and_belongs_to_many:用户
的作业相关联基本上,每个作业都与拥有该任务的用户相关联。 该任务还将分配给将要使用它的多个用户。
我可以成功返回与用户相关但不与用户相关的所有任务。 我试图只显示与current_user(设计)相关的任务
这适用于用户:
assignment.rb
class Assignment < ActiveRecord::Base
belongs_to :deliverable
belongs_to :user
has_and_belongs_to_many :users
end
user.rb
has_and_belongs_to_many :assignments
协会工作正常。在控制台中,我可以通过HABTM将所有与之关联的用户分配给作业。
我有一个设计师信息中心,我只想显示当前用户的分配。
designer_dashboard controller:
#if I do this I'll get all the assignments:
@assignments = Assignment.all
# but I want to be able to do something like this to get only the assingments associated with the current user via HABTM
@assignments = Assignment.includes(:users).where(["user_ids =?", current_user])
答案 0 :(得分:1)
数据未建模以反映用户和任务之间存在的两种不同类型的关系 - 任务所有者和任务设计者。你只设置了其中一个。
您需要重新构建数据并为关系提供更有意义的名称。
一种方法是使用has_many_through进行任务与其分配给谁的关联。任务has_many设计师通过AssignedTasks。 Task和User之间的关联可以命名为TaskOwner。如果设置这两个关联,您将能够获得current_user.owned任务和current_user.assigned任务,这比引用用户和用户更明确。
class Task
belongs_to :task_owner, class_name: "User"
has_many :assigned_tasks
has_many :designers, through: assigned_tasks, class_name: "User"
end
class User
has_many :owned_tasks, class_name: "Task"
has_many :assigned_tasks, foreign_key: designer_id
has_many :tasks, through: :assigned_tasks,
end
class AssignedTask
belongs_to :designer
belongs_to :task
end
您需要生成一些迁移才能添加必需的ID。
另外,我似乎记得在某处读取任务是一个保留字。您可能希望将任务重命名为其他内容。
答案 1 :(得分:0)
马戈答案是对的。
这适用于控制器:
@assignments = current_user.assignments