モデルAとBがあります。A has_many B、およびBはAに属します。これまでのところ、非常に優れています。ただし、Bに主キーがないことを指定します。個々のB行を変更または削除する予定はなく、数百万から数十億の行があると予想されるため、主キーを省略すると、スペース的に非常に便利になります。
Bのテーブルを作成するための移行は次のようになりました。
class CreateBs < ActiveRecord::Migration
def change
create_table :bs, {:id => false} do |t|
# … rest of fields …
end
end
end
残念ながら、ActiveRecordは同意しません。Aを作成しようとすると(そうです!)、次のようになります。
1.9.3p194 :001 > A.create!
(0.3ms) BEGIN
(0.1ms) ROLLBACK
ActiveRecord::UnknownPrimaryKey: ActiveRecord::UnknownPrimaryKey
from /Users/annelicuss/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/reflection.rb:366:in `primary_key'
from /Users/annelicuss/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/reflection.rb:216:in `association_primary_key'
from /Users/annelicuss/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations/has_many_association.rb:104:in `foreign_key_present?'
from /Users/annelicuss/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations/association.rb:165:in `find_target?'
from /Users/annelicuss/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations/collection_association.rb:332:in `load_target'
from /Users/annelicuss/.rvm/gems/ruby-1.9.3-p194/gems/activerecord-3.2.8/lib/active_record/associations/collection_proxy.rb:44:in `load_target'
…
例外をキャッチすると、そのmessage
状態は次のようになります。
"Unknown primary key for table bs in model B."
(これは、Bに主キーがないためです。)
この問題は発生させたくありません。方法はありますか?