試圖在rails 4中重構has_and_belongs_to_many
關聯以添加額外的列,但是在自引用has_many_through
上掙扎。如何使用rails has_many通過關聯來防止'未知列'錯誤
一個項目可以包含很多組件。組件實際上只是項目,因此可以擁有自己的組件;
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'
,所以我在哪裏錯誤地定義了它?那麼,我如何讓這個協會起作用呢?
錯誤狀態表明它正在查找'items'表中的列,而不是'component_items'。重命名該列不會解決問題。指定外鍵不會改變任何內容。 – mvanio
爲什麼需要'type'? – mvanio