モデルがあるとしましょう
class Widget < ActiveRecord::Base
has_many :widget_spots
と
class WidgetSpot < ActiveRecord::Base
belongs_to :widget
また、MySQLテーブル'widget_spots'には、列'widget_id'があります。
+--------------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| widget_id | int(11) | NO | PRI | NULL | |
................
+--------------------+------------+------+-----+---------+-------+
さて、私のRailsコンソールで、widget_spot_idsにアクセスしようとするとエラーが発生します。
> widget = widgets.find(:first)
> widget.widget_spot_ids
ActiveRecord::UnknownPrimaryKey: ActiveRecord::UnknownPrimaryKey
from /Users/xxxxx/.rvm/gems/ruby-1.9.2-p320@rails-3.1.1/gems/activerecord-3.1.1/lib/active_record/reflection.rb:374:in `primary_key'
from /Users/xxxxx/.rvm/gems/ruby-1.9.2-p320@rails-3.1.1/gems/activerecord-3.1.1/lib/active_record/reflection.rb:228:in `association_primary_key'
from /Users/xxxxx/.rvm/gems/ruby-1.9.2-p320@rails-3.1.1/gems/activerecord-3.1.1/lib/active_record/associations/collection_association.rb:51:in `ids_reader'
from /Users/xxxxx/.rvm/gems/ruby-1.9.2-p320@rails-3.1.1/gems/activerecord-3.1.1/lib/active_record/associations/builder/collection_association.rb:62:in `block in define_readers'
from (irb):12
from /Users/xxxxx/.rvm/gems/ruby-1.9.2-p320@rails-3.1.1/gems/railties-3.1.1/lib/rails/commands/console.rb:45:in `start'
from /Users/xxxxx/.rvm/gems/ruby-1.9.2-p320@rails-3.1.1/gems/railties-3.1.1/lib/rails/commands/console.rb:8:in `start'
from /Users/xxxxx/.rvm/gems/ruby-1.9.2-p320@rails-3.1.1/gems/railties-3.1.1/lib/rails/commands.rb:40:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
ただし、インスタンスを取得すると、エラーなしでリストが表示> widget.widget_spots
されます。予期されたSQLクエリを実行し、リストを表示します。
ActiveRecord::UnknownPrimaryKey
エラーが発生している場所と方法をどのように把握できますか。どのデータベースでどの主キーを見つけようとしていますか?