Ruby on rails RubyonRails连接,在不丢失相关对象的情况下

Ruby on rails RubyonRails连接,在不丢失相关对象的情况下,ruby-on-rails,Ruby On Rails,我在Rails4.2上使用Ruby2.1.5,遇到了一个小问题 我有很多用户,有很多关系登录 @users = User.joins(:logins).where("country LIKE ?", "%#{params[:searchc]}%").uniq 我想根据登录找到用户,但我无法找到一个好的解决方案来在我的视图中显示关联的对象。 加入后,我会丢失相关的登录名,只剩下找到的登录名,但我需要所有的登录名 @users.includes(:logins).each 这就是问题所在。 为每

我在Rails4.2上使用Ruby2.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)
如果有更好的解决方案,请告诉我,您需要的是代替加入。它也称为N+1查询

@users = User.includes(:logins).where("country LIKE ?", "%#{params[:searchc]}%").uniq
您需要的不是
连接
。它也称为N+1查询

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

您需要限定国家/地区,所以假设它在您的登录表中,类似这样

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

您需要限定国家/地区,所以假设它在您的登录表中,类似这样

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

我不完全理解你的问题。您想获取所有用户(具有
where
condition)并显示每个用户的登录名吗?用英语sry;)有点难解释我想找到用户!但是搜索取决于登录名,在加入@users.first.logins后,只返回点击的登录名,而不是所有属于该用户的登录名。我认为有一种方法可以在一行中完成这一操作,而无需重新加载用户的所有登录名。我不完全理解您的问题。您想获取所有用户(具有
where
condition)并显示每个用户的登录名吗?用英语sry;)有点难解释我想找到用户!但是搜索取决于登录名,在加入@users.first.logins后,只返回点击的登录名,而不是所有属于该用户的登录名。我认为有一种方法可以在一行中完成此操作,而无需重新加载来自某个用户的所有登录名。我尝试过,但:where子句中的未知列“国家”,我尝试过,但:未知列where子句中的country不是我的问题。我可以找到所有具有正确国家/地区的用户,但之后我无法使用已加载的登录,因为只有那些具有国家/地区=params[:searchc]的用户是左侧的,这不是我的问题。我可以找到所有具有正确国家/地区的用户,但在此之后,我无法使用已加载的登录,因为只剩下那些具有country=params[:searchc]的用户