Ruby on rails 按属于自定义外键的\u进行搜索

Ruby on rails 按属于自定义外键的\u进行搜索,ruby-on-rails,postgresql,activerecord,has-many,belongs-to,Ruby On Rails,Postgresql,Activerecord,Has Many,Belongs To,我试图通过两支球队搜索比赛,我尝试了几种语法,但没有任何帮助 型号匹配: class Match < ApplicationRecord belongs_to :home, class_name: 'Team', foreign_key: :home_id belongs_to :away, class_name: 'Team', foreign_key: :away_id end 错误: ActiveRecord::语句无效(PG::UndefinedTable:错误:缺少 表

我试图通过两支球队搜索比赛,我尝试了几种语法,但没有任何帮助

型号匹配:

class Match < ApplicationRecord
  belongs_to :home, class_name: 'Team', foreign_key: :home_id
  belongs_to :away, class_name: 'Team', foreign_key: :away_id
end
错误:

ActiveRecord::语句无效(PG::UndefinedTable:错误:缺少 表“homes”的FROM子句条目


选项1。

在Rails控制台查询中检查
将Match.joins(:home,:away)放入\u sql
。 您可以得到如下结果:

SELECT "matches".* FROM "matches" INNER JOIN "teams" ON "teams"."id" = "matches"."home_id" INNER JOIN "teams" "away_matches" ON "away_matches"."id" = "matches"."away_id"
如果是这样,请使用类似于

Match.joins(:home, :away).where(teams: { name: 'Germany' }, away_matches: {name: 'China'})
Match.where(home: Team.where(name: 'Germany'), away: Team.where(name: 'China'))
选项2。

尝试像查询一样进行查询

Match.joins(:home, :away).where(teams: { name: 'Germany' }, away_matches: {name: 'China'})
Match.where(home: Team.where(name: 'Germany'), away: Team.where(name: 'China'))
您还可以预先查找团队ID:

home_id = Team.find_by(name: 'Germany').id
away_id = Team.find_by(name: 'China').id
Match.where(home_id: home_id, away_id: away_id)

第一个选项
Match.joins(:home,:away)。其中(球队:{name:'德国'},客场比赛:{name:'中国'})
dosent工作和第二个选项yes@BorisBRESCIANI选项1查询取决于放置Match.joins(:home,:away)的内容。to_sql精确显示(可能取决于Rails版本)。