我正在构建一个 Rails 3.2 Web 应用程序,我需要一些帮助来构建 SQL 查询。 在我的应用程序中,我有用户、项目和任务。用户通过称为分配的连接表分配任务。
我需要获取所有项目的列表,这些项目已分配了所选用户的任务。
项目
has_many :tasks
任务
has_many :assignments
has_many :users, :through => :assignments
用户
has_many :assignments
has_many :tasks, :through => :assignments
作业
belongs_to :user
belongs_to :task
如何以最有效和最佳实践的方式构造此查询?
更新
这就是我最终解决它的方法:
def index
tasks = current_user.tasks.joins(:project)
@output = tasks.map{|task| task.project}.uniq
end
最佳答案
我首先会在 has_many
关联上指定 :uniq
选项,该选项应返回用户关联任务的唯一列表:
# app/models/user.rb
has_many :tasks, :through => :assignments, :uniq => true
然后,迭代任务并编译所有父项目的数组:
tasks = User.first.tasks
projects = []
tasks.each do |task|
projects << task.project
end
最后,从数组中删除所有重复的项目:
project.uniq! #=> array of `Project` objects
关于ruby-on-rails-3 - 如何根据子记录获取父记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17019474/