Frage

Ich habe versucht, ein einzelnes Tisch -Vererbungsmodell in Rails 3 einzurichten, in dem die übergeordnete Klasse auch eine HASMANY -Beziehung enthält. Leider kann ich es nicht zum Laufen bringen. Hier sind drei Klassen als Beispiel:

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

class Paragraph < ActiveRecord::Base
    belongs_to :article
end

class SportsArticle < Article
end

Und hier ist die Migration, mit der dies eingerichtet werden würde:

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

Wenn ich es so eingerichtet habe und versuche, ein neues Sportsartikel zu erstellen, sagen wir Folgendes:

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

Ich bekomme immer den folgenden Fehler:

"TypeError: Die Zeichenfolge kann nicht integer konvertiert werden"

Ich habe keine Ahnung, wie ich dieses Problem beheben kann, und habe versucht, ohne Erfolg online zu finden. Sieht jemand, der Erfahrung mit STI -Modellen hat, etwas falsch? Hier ist der Link zur Dokumentation der Erstellenmethode, wenn sie bei der Diagnose des Problems hilft:http://api.rubyonrails.org/classes/activerecord/base.html#method-c-create

War es hilfreich?

Lösung 2

Der Fehler wurde aufgrund einer Namenskollision verursacht. Ich benutzte einen Namen für eines meiner Modelle, der als "Attribute" bezeichnet wurde, was das Problem verursachte. Der Hinweis, der schließlich das Problem diagnostizierte Dokumentation der Rails Association.

Andere Tipps

Versuchen Sie es zu umbenennen: Geben Sie etwas anderes ein, wie: article_type

z.B:

t.string      :article_type,      :null => false    # for STI
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top