rails检查子对象的存在

时间:2016-03-11 12:40:44

标签: ruby-on-rails activerecord

我有一个Rails 4应用程序。用户has_one个人资料。当sby注册他/她已经是用户时,他/她在提交个人资料表格后将只有个人资料。

在我的用户页面上,我想显示所有拥有个人资料的用户。

有几种方法可以显示具有现有个人资料的用户,但我不知道哪个是首选。

  1. 在控制器中查询:仅加载具有个人资料的用户

    @users = User.joins(:profile).includes(:profile)......
    
  2. 如果在视图中profile.present?

    @users = User.includes(:profile).......
    
    
    <% if user.profile.present? %>
      <%= user.profile.first_name %>
      ...........
    
  3. 也许有更好的方法。

1 个答案:

答案 0 :(得分:3)

你为什么不走另一条路?加载所有配置文件,并确保每个配置文件都属于单个用户,因此下面的代码将完成工作,没有任何条件行:

在控制器中:

@profiles = Profile.all

在视图中:

@profiles.each do |profile|
  profile.user # it would give you the user, whom it belongs to
end

要避免n+1次查询,您可以使用Profile.includes(:user).all来预加载所有用户。