我有一個Entry
模型和Category
模型,如果一個條目中有許多分類(通過EntryCategories
):使用構建具有的has_many:通過
class Entry < ActiveRecord::Base
belongs_to :journal
has_many :entry_categories
has_many :categories, :through => :entry_categories
end
class Category < ActiveRecord::Base
has_many :entry_categories, :dependent => :destroy
has_many :entries, :through => :entry_categories
end
class EntryCategory < ActiveRecord::Base
belongs_to :category
belongs_to :entry
end
當創建一個新的條目,我創建它通過調用@journal.entries.build(entry_params)
,其中entry_params
是來自輸入表單的參數。如果選擇的類別,但是,我得到這個錯誤:
ActiveRecord::HasManyThroughCantDissociateNewRecords in Admin/entriesController#create
Cannot dissociate new records through 'Entry#entry_categories' on '#'. Both records must have an id in order to delete the has_many :through record associating them.
注意,在第二行以「#」是逐字;它不輸出對象。
我已經嘗試將表單上的我的類別選擇框命名爲categories
和category_ids
,但都沒有區別;如果其中任一個在entry_params
中,保存將失敗。如果未選擇類別,或者我從entry_params
(@entry_attrs.delete(:category_ids)
)中刪除categories
,則保存工作正常,但類別顯然不保存。
在我看來,問題是entry條目記錄試圖在保存條目記錄之前進行?不應該建立照顧?
更新:
這裏的schema.rb的相關部分,如要求:
ActiveRecord::Schema.define(:version => 20090516204736) do
create_table "categories", :force => true do |t|
t.integer "journal_id", :null => false
t.string "name", :limit => 200, :null => false
t.integer "parent_id"
t.integer "lft"
t.integer "rgt"
end
add_index "categories", ["journal_id", "parent_id", "name"], :name => "index_categories_on_journal_id_and_parent_id_and_name", :unique => true
create_table "entries", :force => true do |t|
t.integer "journal_id", :null => false
t.string "title", :null => false
t.string "permaname", :limit => 60, :null => false
t.text "raw_body", :limit => 2147483647
t.datetime "created_at", :null => false
t.datetime "posted_at"
t.datetime "updated_at", :null => false
end
create_table "entry_categories", :force => true do |t|
t.integer "entry_id", :null => false
t.integer "category_id", :null => false
end
add_index "entry_categories", ["entry_id", "category_id"], :name => "index_entry_categories_on_entry_id_and_category_id", :unique => true
end
此外,節能與類別的條目更新操作正常工作(通過調用@entry.attributes = entry_params
)所以在我看來,問題只是基於不存在EntryCategory記錄被嘗試創建的條目。
請問您可以附上schema.rb的定義嗎? – 2009-06-30 07:12:13