选择rails中包含的字段

时间:2016-05-13 04:19:05

标签: mysql ruby-on-rails activerecord

我有一个用户表和地址表。用户有许多地址。所以我的模型结构是

class User < ActiveRecord::Base
  has_many :addresses
end

class Address < ActiveRecord::Base
  belongs_to :user
end

我想显示用户信息以及用户国家/地区代码。由于我使用includes来避免n+1

User.where(:active => true).includes(:addresses)
SELECT "users".* FROM "users" where active=true
SELECT "addresses".* FROM "addresses" WHERE "addresses"."user_id" IN (1, 2)

在这里,我按照预期获得用户的地址。但在我的场景中,我不想从DB获取所有地址字段。只有country_code足够来自地址对象,因为我不想消耗更多内存。所以,如果像

那样我的第二个查询会很好
 SELECT "addresses"."country_code" FROM "addresses" WHERE "addresses"."user_id" IN (1, 2)

我们可以在上述场景中应用select选项来解决查询问题吗?

1 个答案:

答案 0 :(得分:0)

您无法直接访问包含表记录,因此您需要为此创建一个记录数组。比这个使用一个关联来获取第二个模型的访问数据。像这样。

在您的模型或控制器用户上

@users_addresses = User.where(:active => true).includes(:addresses)

使用您的视图来访问地址模型的数据,如此

<% @users.each do |u|  %>
   <% u.addresses.try(:country_code)%>
<% end %>