Rails 模型关联调用不一致

Rails inconsistent model associations call

我有一个 rails 用户模型:

class Player < ActiveRecord::Base
  has_and_belongs_to_many :character_factors
  has_and_belongs_to_many :stats_factors
end

我的性格因素模型如下:

class CharacterFactor < ActiveRecord::Base
  has_and_belongs_to_many :players
end

我的统计因素模型是:

class StatFactor < ActiveRecord::Base
  has_and_belongs_to_many :players
end

在我的 Player 模型中,我有以下方法:

def self.character_factors(id)
  @character_factors = CharacterFactor.joins(:players).where('players.id = ?', id)
end

和另一种方法:

def self.stat_factors(id)
  @stat_factors = StatFactor.joins(:players).where('players.id = ?', id)
end

character factorsplayers 上的连接查找正确的 table:

players_character_factors 并正确执行查询

stat_factors 上的连接查找 table:

stat_factors_players 从而出错​​。我不确定为什么它会为完全相同的关联查找两个格式不同的 table 名称。是不是我哪里做的不对?

我找到了我的问题的解决方案。

在 Rails 中,对于 HABTM 关联,除非明确指定,否则 table 名称将按照 model 名称的 lexical 顺序自动生成。

在我的例子中,因为我没有指定连接的名称 table,所以 rails 试图寻找的 table 是错误的。我通过这样更新我的模型来修复它:

class Player < ActiveRecord::Base
  has_and_belongs_to_many :character_factors, :join_table => :players_character_factors
  has_and_belongs_to_many :stats_factors, :join_table => :players_stats_factors
end

性格因素也类似:

class CharacterFactor < ActiveRecord::Base
  has_and_belongs_to_many :players, :join_table => :players_character_factors
end

对于统计因素:

class StatFactor < ActiveRecord::Base
  has_and_belongs_to_many :players, :join_table => :players_stats_factors
end