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 方法。
我对 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 方法。