/ / Hilf mir zu verstehen, warum diese ActiveRecord-Modelle Ausnahmen auslösen - Ruby-on-Rails, Activerecord

Hilf mir zu verstehen, warum diese ActiveRecord-Modelle Ausnahmen auslösen - Ruby-on-Rails, Activerecord

Dies sind meine Modelle (beide haben nur eine name:string Attribut):

class Category < ActiveRecord::Base
has_many :subcategories
end

class Subcategory < ActiveRecord::Base
belongs_to :category
end

Ich habe eine rails console:

> c = Category.new(:name => "C1")
=> #<Category id:nil, name:"C1", created_at:nil, updated_at: nil>
> c.save
=> true
> s = c.subcategories.create(:name => "S1")
=> #<Subcategory id:2 name:"S1", created_at: "2011-03-16 17:45:18", updated_at: "2011-03-16 17:45:18">
> s.category
=> nil
> s.save
=> true
> c.subcategories
=> ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column subcategories.category_id: SELECT "subcategories".* FROM "subcategories" WHERE("subcategories".category_id = 2)

Warum ist s.category Null? Warum erhalte ich die SQLException? Stimmt etwas mit meinen Modellen nicht? Ich strebe eine Eins-zu-Viele-Vereinigung an.

Antworten:

2 für die Antwort № 1

Es sieht so aus, als ob in Ihrer Unterkategorietabelle die Spalte category_id fehlt, die erforderlich ist, um den Datensatz einer Kategorie zuzuordnen. Erstellen Sie eine Migration, um sie wie folgt hinzuzufügen:

# Rails 3
rails g migration AddCategoryIdToSubcategories category_id:integer

# Rails 2
script/generate migration AddCategoryIdToSubcategories category_id:integer

Führen Sie dann Ihre Migrationen aus und es sollte funktionieren.


-1 für die Antwort № 2

Ja ... Dies führt zu dem Problem, da c.subcategories immer ein Array zurückgeben (möglicherweise leer). Sie können es so versuchen.

 c = Category.new(:name => "C1")
s = Subcategory.new(:name => "S1")
c.subcategories = [s]
c.save

Ich hoffe es wird klappen.