通过关联查询Rails ActiveRecord has_many

通过关联查询Rails ActiveRecord has_many

问题描述:

当我直接查询我的数据库时,我得到了预期的结果,但没有在rails中。我猜测它与我的关联有关,而且我在3年前对Ruby说过很多坏话。通过关联查询Rails ActiveRecord has_many

Postgres的SQL查询:

SELECT users.email, members.software, members.files 
FROM users INNER JOIN members 
ON members.user_id = users.id 
WHERE members.region_id=2 

结果: “[email protected]”;吨; T “[email protected]”;吨;吨

但是从轨c:

> ←[1m←[36mUser Load (1.0ms)←[0m ←[1mSELECT users.email, 
> members.software, members.files FROM "users" INNER JOIN "members" ON 
> "members"."user_id" = "users"."id" WHERE "members"."region_id" = 
> 2←[0m> => #<ActiveRecord::Relation [#<User id: nil, email: "[email protected]">, #<User id: nil, email: "[email protected]">]> 

这段代码是粘贴在我试图在我的控制器中创建的结果查询和硬编码reg离子ID:

User.joins(:members).select("users.email, members.software, members.files").where(members: {region_id: params[:id]}) 

这是我的模型:

class User < ActiveRecord::Base 
     has_many :members 
     has_many :regions, :through => :members 
end 

class Region < ActiveRecord::Base 
    has_many :members 
    has_many :users, :through => :members 

end 

class Member < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :region 
end 

难道,我很想念我有相关的我的模型的方式还是其他什么东西?

谢谢!

你得到的是active_relations对象。

您可以访问属性这样

users = User.joins(:members).select("users.email, members.software as software, members.files as files").where(members: {region_id: params[:id]}) 

users.each do |u| 
    p u.email 
    p u.software 
    p u.files 
end 
+0

权,所以当我有我的控制器顶部行@members = ......在我看来,底部它告诉我未定义的方法'softare '为#在红宝石错误页面。 – IveMadeAHugeMistake

+0

查询返回一组用户,您将不得不遍历各个用户的成员以获取所需的软件属性。如果你想获得该用户的所有成员的软件和文件,你可以做类似的事情。 @ members.each do | member | softwares = member.members.pluck(:software)files = member.members.pluck(:files)。 Pluck返回一个与符号名称相匹配的所有属性数组,让您能够遍历该数据并显示所有文件和软件 –

+0

我不明白为什么我必须迭代结果,如@JulioGMedina建议。它有效,但似乎会有更直接的方式。 – IveMadeAHugeMistake