我正在使用一个不完全理想的模型结构(即我没有创建它)而且我很难写一个AR查询来获取我想要的数据......
我有以下型号:
class Project < ActiveRecord::Base
has_many :project_states
has_many :states, :through => :project_states
end
class State < ActiveRecord::Base
has_many :forms
has_many :project_states
has_many :projects, :through => :project_states
end
class ProjectState < ActiveRecord::Base
belongs_to :state
belongs_to :project
end
class Form < ActiveRecord::Base
belongs_to :state
end
足够简单。伊什。我要做的是获取所有项目的所有表单列表。基本上,假设我在数据库中有两个表单,另外两个表单都有两个表单。我想得到结果:
-----------------------------------------------
project.name | state.name | form.name
Project 1 Ohio Form 1
Project 1 California Form 2
Project 2 Ohio Form 1
Project 2 California Form 2
我可以使用以下sql查询轻松完成此操作:
SELECT
states.name, forms.name, projects.name
FROM
forms
LEFT JOIN
states ON forms.state_id = states.id
INNER JOIN
project_states ON project_states.state_id = forms.state_id
LEFT JOIN
projects ON projects.id = project_states.project_id;
但我不知道如何通过AR做到这一点。我可以将它作为一个直接的SQL查询,但我需要显示的模型上有方法。我可以通过简单地获取项目,循环它们然后循环遍历每个项目的表单来实现它,但是显示需要是一个可排序的表,这将使得无法对任何表单属性进行排序。
有没有一种简单的方法来实现这个我不见了?例如,如果我做了类似的事情:
Form.joins(:states=> [:projects])
这会为每个表单返回一个结果,而不是每个表单的每个表单的结果。如果我在Projects和Forms之间有直接的关系,那么我就可以轻松获取连接表。但我没有......
答案 0 :(得分:0)
跟进,我无法真正找到一种方法在rails中执行此操作而不使用find_by_sql,因此我最终为视图创建了一个视图和一个新模型以获取我想要的数据。