Rails 4返回与多个用户关联的任务

时间:2016-04-23 19:58:15

标签: ruby-on-rails devise

问题:如何将Assignments与users数组中的众多用户之一关联?

我研究了Rails指南和一些帖子,但我还没有弄明白。

https://codereview.stackexchange.com/questions/46319/is-there-a-better-approach-to-searching-has-and-belongs-to-many-relations

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])

2 个答案:

答案 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