我在Rails中遇到includes
方法的问题。
我有这个用户模型:
class User < ActiveRecord::Base
has_one :account
end
这个帐户模型:
class Account < ActiveRecord::Base
belongs_to :User
end
现在,用户模型有:id
和:names
并且帐户模型包含:user_id
和:country
在另一个控制器中,我想获取并显示其所在国家/地区的所有用户名。
我正在使用此查询
@users = User.includes(:account).where(some condition)
请告诉我在查询中可以添加哪些内容来获取与用户名相关联的所有国家/地区? 提前致谢
答案 0 :(得分:2)
用户在控制器中应该是复数。像这样
header('Content-type: application/json');
在视图中你可以这样做。
@users = User.includes(:account)
由于<% @users.each do |user| %>
<%= user.names %>
<%= user.account.country %>
<% end %>
是用户属性,您可以直接提取,而国家/地区为names
属性,您可以使用account's
答案 1 :(得分:1)
如果它给你错误的话 NoMethodError(未定义的方法`帐号&#39;表示#) 那么这意味着你将它转换为控制器本身的数组。
更改您的代码 例如:
@users = User.includes(:account).where('id < 5')
在视图中
<% @users.each do |user| %>
<%= user.name %>
<%= user.account.country %>
<% end %>
答案 2 :(得分:0)
每当我们使用包含它时,默认情况下会进行外部联接,因此可能会有用户没有任何帐户,并且在尝试访问user.account.country时会出现错误,因为user.account为nil且on它将试图调用不存在的国家方法的零对象。