Tom*_*Tom 1 join model ruby-on-rails associations rails-activerecord
在Rails 3.2.1中
我有:
class Project < ActiveRecord::Base
attr_accessible :name, :description
has_many :subprojects
end
class SubProject < ActiveRecord::Base
attr_accessible :id_name, :description, :num_alloc, :project_id
belongs_to :projects
end
Run Code Online (Sandbox Code Playgroud)
如何在rails控制器中返回,该控件包含"name"属性(来自Project模型)和id_name(description和num_alloc来自SubProject模型)的对象.
在控制器中,如果我做
@results= SubProject.joins('LEFT OUTER JOIN.......)
Run Code Online (Sandbox Code Playgroud)
@results只包含SubProject类的属性,因为SubProject.joins(...)返回一个SubProject对象吗?
那么我如何从两个模型中返回一个具有属性的对象?
@subproject = SubProject.select("subprojects.id_name, subprojects.description, subprojects.num_alloc, projects.name").joins("LEFT OUTER JOIN projects ON projects.id = sub_projetcs.project_id")
Run Code Online (Sandbox Code Playgroud)
如果您只想使用一个对象来避免多个SQL查询(还有其他原因?),您可以这样做:
@results = SubProject.includes(:projects).where(...)
Run Code Online (Sandbox Code Playgroud)
那你可以做
@results.first.projects.name
Run Code Online (Sandbox Code Playgroud)
这不会触发新的SQL查询.
此外,如果在SubProject定义中添加一行
class SubProject < ActiveRecord::Base
delegate :name, :to => :projects, :prefix => true
...
end
Run Code Online (Sandbox Code Playgroud)
然后你可以写:
@results = SubProject.includes(:projects).where(...)
@results.first.projects_name
Run Code Online (Sandbox Code Playgroud)
因此,您提到了几个具有两个模型属性的对象.