Rails 3 одиночная таблица наследования с вопросом has_many - PullRequest
1 голос
/ 23 октября 2010

Я пытался настроить модель наследования одной таблицы в Rails 3, в которой родительский класс также содержит отношение has_many. К сожалению, я не могу заставить его работать. Вот три класса в качестве примера:

class Article < ActiveRecord::Base
    has_many :paragraphs, :dependent => :destroy, :autosave => true
end

class Paragraph < ActiveRecord::Base
    belongs_to :article
end

class SportsArticle < Article
end

А вот миграция, которая будет использоваться для настройки:

class AddTables < ActiveRecord::Migration
    def self.up
        create_table :articles do |t|
            t.string      :type,      :null => false    # for STI
            t.string      :title,     :null => false
            t.timestamps
        end

        create_table :paragraphs do |t|
            t.references  :article,   :null => false
            t.timestamps
        end
    end

    def self.down
        drop_table :articles
        drop_table :paragraphs
    end
end

Когда я настраиваю его таким образом и пытаюсь создать новый SportsArticle, скажем, выполнив следующее:

SportsArticle.create(:title => "Go Giants")

Я всегда получаю следующую ошибку:

«Ошибка типа: невозможно преобразовать строку в целое число»

Я понятия не имею, как решить эту проблему, и попытался найти решение онлайн безрезультатно. Кто-нибудь, кто имеет опыт работы с моделями ИППП, видит что-то не так? Вот ссылка на документацию по методу create, если это поможет в диагностике проблемы: http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-create

Ответы [ 2 ]

0 голосов
/ 25 октября 2010

Ошибка была вызвана конфликтом имен. Я использовал имя для одной из моих моделей под названием «атрибуты», которая вызывала проблему. Подсказка, которая в конечном итоге диагностировала проблему, пришла из Документации Rails Association .

0 голосов
/ 23 октября 2010

Попробуйте переименовать: введите во что-то еще, например: article_type

Например:

t.string      :article_type,      :null => false    # for STI
...