共通の列 (player_key) で相互にリンクする 2 つの異なるテーブル (tbl_players と tbl_player_ratings) を含むレガシー データベースがあります。
私の問題: Rails3 では、PlayersRatings を Players に結合して取得しようとすると、PlayerRatings の列のみが返されます。ただし、mysql コマンド ラインで同じ SQL クエリを実行すると、両方のテーブルの列が返されます。
簡単にするために、ここでは各テーブルの列の一部のみを示します。
tbl_players
player_key, last_name
tbl_player_ratings
player_key, rating
これらのテーブルを表す私の 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
Railsコンソールで実行しているクエリ:
PlayerRating.joins(:player).select("*").limit(1)
これは、Player フィールドが表示されていない唯一の PlayerRating を返します。
上記の 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 が同じことをしないのはなぜですか (両方のテーブルのすべての列を返す)?