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 factors
和 players
上的连接查找正确的 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
我有一个 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 factors
和 players
上的连接查找正确的 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