Ruby on rails 3 Rails3和ActiveRecord与旧数据库:连接,不返回其他表列

Ruby on rails 3 Rails3和ActiveRecord与旧数据库:连接,不返回其他表列,ruby-on-rails-3,activerecord,legacy-database,Ruby On Rails 3,Activerecord,Legacy Database,我有一个遗留数据库,其中包含两个不同的表(tbl_players和tbl_player_ratings),它们在一个公共列(player_键)上相互链接 我的问题是:对于Rails3,当我尝试检索加入到玩家的PlayerRatings时,只返回PlayerRatings中的列。但是,如果在mysql命令行执行相同的SQL查询,则返回两个表中的列 为了简单起见,我在这里只提供每个表中的几个列 tbl_球员 tbl_球员评分 表示这些表的Rails类如下所示: class PlayerRating

我有一个遗留数据库,其中包含两个不同的表(tbl_players和tbl_player_ratings),它们在一个公共列(player_键)上相互链接

我的问题是:对于Rails3,当我尝试检索加入到玩家的PlayerRatings时,只返回PlayerRatings中的列。但是,如果在mysql命令行执行相同的SQL查询,则返回两个表中的列

为了简单起见,我在这里只提供每个表中的几个列

tbl_球员 tbl_球员评分 表示这些表的Rails类如下所示:

class PlayerRating < ActiveRecord::Base
  establish_connection :legacy
  set_table_name 'tbl_player_ratings'
  set_primary_key "player_key"
  belongs_to :player,
             :foreign_key => 'player_key'
end

class Player < ActiveRecord::Base
  establish_connection :legacy
  set_table_name 'tbl_players'
  set_primary_key "player_key"
  has_many :player_ratings,
           :foreign_key => 'player_key'
end
这将返回一个唯一的PlayerRating,不表示任何Player字段

上述rails命令生成的SQL:

SELECT * FROM `tbl_player_ratings` INNER JOIN `tbl_players` ON `tbl_players`.`player_key` = `tbl_player_ratings`.`player_key` LIMIT 1
当我在mysql命令行上执行该命令时,两个表中的所有列都将返回


为什么Rails和ActiveRecord做的不一样(返回两个表中的所有列)?

PlayerRating只是一个PlayerRating对象;您不能通过查询上的连接(:Player)强制它成为组合PlayerRating播放器

在该查询之后,您将可以通过
player\u rating.player
访问该播放器

array_of_player_ratings = PlayerRating.joins(:player).limit(any_number) 
single_player_rating = PlayerRating.joins(:player).first 
player = single_player_rating.player

请参阅,以更全面地描述SQL查询和ActiveRecord查询之间的区别

请参阅[此处][1],并标记为副本。[1]:
PlayerRating.joins(:player).select("*").limit(1)
SELECT * FROM `tbl_player_ratings` INNER JOIN `tbl_players` ON `tbl_players`.`player_key` = `tbl_player_ratings`.`player_key` LIMIT 1
array_of_player_ratings = PlayerRating.joins(:player).limit(any_number) 
single_player_rating = PlayerRating.joins(:player).first 
player = single_player_rating.player