Rails 4 期包含和获取相关项目

Rails 4 issue in includes and fetch associated items

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

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

当您获取记录列表时,控制器中的用户应该是复数。像这样

 @users = User.includes(:account)

看来你可以做到这一点。

<% @users.each do |user| %>
  <%= user.names %>
  <%= user.account.country %>
<% end %>

因为names是user属性,可以直接取,而country是account's属性,可以用user.account.country

如果它给你这样的错误 NoMethodError(# 的未定义方法“帐户”) 那么这意味着您正在将其转换为控制器本身的数组。

更改您的代码 例如:

@users = User.includes(:account).where('id < 5')

并在视图中

<% @users.each do |user| %>
  <%= user.name %>
  <%= user.account.country %>
<% end %>

每当我们使用 includes 它时,默认情况下都会进行外部连接,因此可能会有没有任何帐户的用户,您在尝试以 user.account 身份访问 user.account.country 时会出错是 nil 并且在 nil 对象上它将尝试调用不存在的 country 方法。