【发布时间】:2011-01-19 02:15:44
【问题描述】:
如何通过中间模型对象有条件地获取某些模型的对象及其关联模型的对象?然后这将用于生成 JSON(通过to_json)。
下面是更通用的设置:
class JobSet < ActiveRecord::Base
belongs_to :job_system
has_many :resources, through => :job_system
has_many :jobs
...
end
class JobSystem < ActiveRecord::Base
has_many :job_sets
has_many :resources
...
end
class Resource < ActiveRecord::Base
belongs_to :job_system
has_many_and_belongs_to_many :jobs
...
end
class Job < ActiveRecord::Base
belongs_to :job_system
belongs_to :job_set
has_many_and_belongs_to_many :resources
...
end
我想要做的是获取所有资源及其对应的作业,但只获取属于特定作业集的作业。
更新:即使一个资源没有与之关联的任何工作,我仍然希望将它与其余资源一起获取。目的是显示所有资源以及分配给它们的任何作业。
看起来我可以在使用through 时设置conditions,但是当它是我所追求的下一个对象关联时,我似乎无法弄清楚如何做到这一点......
这类问题有好听的名字吗?有什么简单的方法可以做到这一点?
更新 2:似乎有一些解决方案在控制器中运行良好,但我在视图中使用 to_json 来预加载画布元素。当我这样做时,它似乎会自动包含所有工作:
var resources = <%= @resources.to_json(:include => {:jobs => {:only => :id}}) %>;
手动 SQL JOIN 甚至会对此有所帮助吗?
【问题讨论】:
标签: ruby-on-rails json activerecord associations has-many-through