Помогите мне понять, почему эти модели ActiveRecord генерируют исключения - PullRequest
0 голосов
/ 16 марта 2011

Это мои модели (обе имеют только атрибут name:string):

class Category < ActiveRecord::Base
    has_many :subcategories
end

class Subcategory < ActiveRecord::Base
    belongs_to :category
end

Я начал 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)

Почему s.category ноль? Почему я получаю SQLException? Что-то не так с моими моделями? Я собираюсь в ассоциации один ко многим.

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

Похоже, что в вашей таблице подкатегорий отсутствует столбец category_id, который необходим для связи записи с категорией. Создайте миграцию, чтобы добавить ее так:

# Rails 3
rails g migration AddCategoryIdToSubcategories category_id:integer

# Rails 2
script/generate migration AddCategoryIdToSubcategories category_id:integer

Затем запустите миграцию, и она должна работать.

0 голосов
/ 16 марта 2011

Да ... Это создаст проблему, потому что c.subcategories всегда возвращает массив (может быть пустым). Вы можете попробовать вот так.

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

Надеюсь, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...