Ruby on Rails加入,不会丢失关联对象

时间:2015-08-04 11:49:33

标签: ruby-on-rails

我在rails 4.2上使用ruby 2.1.5并且遇到了一些问题 我得到了用户并且有很多关系登录。

@users = User.joins(:logins).where("country LIKE ?", "%#{params[:searchc]}%").uniq

我希望根据登录信息找到用户,但我无法找到一个很好的解决方案来在我的视图中显示相关对象。 随着连接我失去了相关的登录,只剩下找到的登录,但我需要所有。

@users.includes(:logins).each

是问题所在。 为每个用户启动一个新的加载登录(@ users.first.logins)非常慢......

编辑: 好吧,我有一个解决方法:

@users = User.joins("JOIN logins ON (logins.user_id = users.id AND logins.country LIKE '#{params[:searchc]}')", ).uniq.includes(:logins)

如果有更好的解决方案请告诉我请

2 个答案:

答案 0 :(得分:0)

您需要的是includes而不是joins。它也被称为N + 1查询

@users = User.includes(:logins).where("country LIKE ?", "%#{params[:searchc]}%").uniq

答案 1 :(得分:0)

您需要确定国家/地区的资格,因此假设它位于您的登录表中,就像这样

  @users = User.joins(:logins).("logins.country LIKE ?", "%#{params[:searchc]}%").uniq