余分な列を追加するためにhas_and_belongs_to_many
アソシエーションをレール4でリファクタリングしようとしましたが、自己参照has_many_through
で苦労しています。レールで「不明な列」エラーを防ぐ方法を教えてください。
アイテムは多くのコンポーネントで構成できます。コンポーネントは本当に単なるアイテムなので、独自のコンポーネントを持つことができます。
class Item < ActiveRecord::Base
has_many :components, through: :component_items
has_many :component_items
end
class Component < ActiveRecord::Base
has_many :items, through: :component_items
has_many :component_items
self.table_name ="Items"
end
class ComponentItem < ActiveRecord::Base
has_many :items
has_many :components
end
とスキーマがどのように見える...
create_table "component_items", force: :cascade do |t|
t.integer "item_id", limit: 4, null: false
t.integer "component_id", limit: 4, null: false
end
create_table "items", force: :cascade do |t|
t.string "sku", limit: 255
t.decimal "height", precision: 6, scale: 2
t.decimal "width", precision: 6, scale: 2
t.decimal "depth", precision: 6, scale: 2
end
はその後
i=Item.first
i.components
は私が取得:
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'items.component_item_id' in 'on clause': SELECT
items
.* FROMitems
INNER JOINcomponent_items
ONitems
.component_item_id
=component_items
.id
WHEREcomponent_items
.item_id
= 87675
私は列'items.component_item_id'
を必要としないので、どこで間違って定義したのですか?次に、この関連付けをどのように機能させるのですか?
エラーは、 'item'テーブルではなく、' component_items'でカラムを探していることを示しています。列の名前を変更しても問題は解決されません。外部キーを指定しても何も変更されません。 – mvanio
なぜ 'type'の必要性? – mvanio