foreign_keyポリシーを守っていないモデルに問題があります。has_manyに特定の:foreign_keyを使用させる方法
キャラクターモデルは、以下のフィールドがあります。 名:文字列 レベル:文字列 realm_id: レルムをint型の整数
class Character < ActiveRecord::Base
belongs_to :realm
end
は私のレルムモデルは次のようになります。
class Realm < ActiveRecord::Base
has_many :characters, :foreign_key => "realm_id"
end
しかし、キャラクターモデルがrealm_idではなくforeign_keyとして:realm列を使用するようになっているようです。私はそれをどうやって修正するかについての手がかりはない。 realmフィールドを無視し、:realm_idのために移動する他の方法はありますか?列の名前を変更する必要はありませんか?
[明確にするための編集]
キャラクタモデルがrealm_id持っている:整数フィールド。私はforeign_keyを持っていないことを試みましたが、両方の結果は同じです。
ルビー-1.9.2-P136:012> C = Character.new =>#
ルビー-1.9.2-P136:013> c.realm = "Sargeras"
のActiveRecord: :AssociationTypeMismatch:Realm(#2154038240)expected、got String(#2151988680)
foreign_keyを持っているにもかかわらず、それは領域の列を放棄することを拒否します。
[編集2]
レルムコラムはちょうど原因にhas_manyとbelongs_toの関連を引き継ぎます。これまでのところこれを壊す方法はないので、解決方法は列を削除するか(それを取る方法です)、別の名前に変更します。
私はこれを試しましたが、作成した関連付けに基づいて、Realmオブジェクトを参照するCharacterのメソッド "realm"が作成されるため、Characterオブジェクトを作成することすらできません。だから私はc = Character.new(:realm => "wasteland")を呼び出すことができません。なぜなら、文字列ではなく "realm"のRealmオブジェクトを期待しているからです。とにかく、私はあなたのオブジェクトモデルを見るほど、あなたは正しい方法に近づいているのだろうかと思います。なぜキャラクターはrealm_idとrealmの両方を持っていますか?確かにrealm_idに基づいて必要なときにレルム情報を参照し、それをCharacterモデルに格納しないでください。 – JimDaniel
あなたは領域モデルで領域と呼ばれるフィールドについて話しますか?それを別のものと呼んで、外来キーを削除してください – jamesc