我有一个用户表和地址表。用户有许多地址。所以我的模型结构是
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
选项来解决查询问题吗?
答案 0 :(得分:0)
您无法直接访问包含表记录,因此您需要为此创建一个记录数组。比这个使用一个关联来获取第二个模型的访问数据。像这样。
在您的模型或控制器用户上
@users_addresses = User.where(:active => true).includes(:addresses)
使用您的视图来访问地址模型的数据,如此
<% @users.each do |u| %>
<% u.addresses.try(:country_code)%>
<% end %>