包含和获取相关项的Rails 4问题

时间:2015-08-20 09:04:12

标签: ruby-on-rails ruby-on-rails-4 associations has-one

我在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)

请告诉我在查询中可以添加哪些内容来获取与用户名相关联的所有国家/地区? 提前致谢

3 个答案:

答案 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它将试图调用不存在的国家方法的零对象。