Rails - 显示具有来自 2 个不同连接表的交叉属性的用户

Rails - displaying users with intersecting properties from 2 different join tables

我是初学者,所以我的问题标题可能不是很清楚。出于这个原因,很难找到解决我遇到的问题的方法。我正在开发一个语言学习应用程序,它允许用户与想要学习他们语言的母语人士联系,即正在学习意大利语和西班牙语的母语为英语的人将能够与想要学习英语的意大利语和西班牙语母语人士联系.

我有一种语言 table,它的语言名称是一个字符串和 2 个连接 tables:Native 和 Desired。这些都需要 user_id 和 language_id.

我的模型是这样设置的:

class User < ActiveRecord::Base
  has_many :natives
  has_many :native_languages, through: :natives, source: :language

  has_many :desireds
  has_many :desired_languages, through: :desireds, source: :language
end

class Language < ActiveRecord::Base
    has_many :native_speakers, through: :native_languages, source: :natives
    has_many :desired_speakers, through: :desired_languages, source: :desireds
end

class Native < ActiveRecord::Base
    belongs_to :user
    belongs_to :language
end

class Desired < ActiveRecord::Base
    belongs_to :user
    belongs_to :language
end

我想在用户索引上显示匹配的用户,所以我需要有关应该在用户控制器上的索引方法中进行的查询的帮助。

这是我第一次 post 在这里,所以如果我错过了任何重要的部分,请告诉我。在此先感谢您的帮助!

使用子查询。

我想要的母语人士

user = User.find(params[:id])
desired_lanuages = user.desired_languages
User.where(id: Native.select(:user_id).where(language: desired_lanuages))

谁要我

native_language = user.native_languages
User.where(id: Desired.select(:user_id).where(language: native_language))

匹配

User.where(id: Native.select(:user_id).where(language: desired_lanuages))
  .where(id: Desired.select(:user_id).where(language: native_language))

我不尝试 运行 代码。但我认为那种代码是可能的