0

私のモデルは次のようになります。

    class Location < ActiveRecord::Base
  attr_accessible :title
  has_and_belongs_to_many :adjacent_locations, :class_name => "Location", :foreign_key => "adjacent_location_id", :join_table => "adjacent_locations_locations"
  has_many :npcs #who are currently in this location
  has_and_belongs_to_many :expected_npcs, :class_name => "Npc" #who do I expect to be here (is it their house?)
  has_and_belongs_to_many :items  #what do I actually have?
  has_and_belongs_to_many :expected_items, :class_name => "Item"
  has_and_belongs_to_many :expected_item_types, :class_name => "ItemType", :foreign_key => "e_item_type_id", :join_table => "e_item_types_locations"
end

「expected_item_types」を除いて、これらの has_and_belongs_to_many のすべてが機能します。

モデル内の隣接する場所のように見えますが、機能しません。

私の移行は問題なく実行され、私が知る限り、他の結合テーブルとまったく同じように見えます。

class CreateEItemTypesLocationsTable < ActiveRecord::Migration
    def self.up
    create_table :e_item_types_locations, :id => false do |t|
        t.references :e_item_type
        t.references :location
    end
    add_index :e_item_types_locations, [:e_item_type_id, :location_id], :name => "eit_loc"
  end

  def self.down
    drop_table :e_item_types_locations
  end
end

expected_items と同じように名前付きインデックスがあり、Location と同じようにモデル内に外部キーがあります。名前付きインデックスで外部キーを設定するときに何か特別なことはありますか?

私が得ている実際のエラーは

SQLite3::SQLException: no such column: e_item_types_locations.item_type_id: SELECT "item_types".* FROM "item_types" INNER JOIN "e_item_types_locations" ON "item_types"."id" = "e_item_types_locations"."item_type_id" WHERE "e_item_types_locations"."e_item_type_id" = 1

これは、私が設定した外部キ​​ーを完全に無視していることを意味します...これには明らかに問題がありますか?

編集:外部キーではなく、「association_foreign_key」である必要があるため、少なくともその一部を理解したと思います。しかし...それでは...なぜ、adidas_locations に対してそれを行う必要がなかったのでしょうか? モデルと同じクラスだったからでしょうか。

4

1 に答える 1