2010-10-22 8 views
1

J'ai essayé d'installer un modèle d'héritage de table unique dans Rails 3 dans lequel la classe parent contient également une relation has_many. Malheureusement, je ne peux pas le faire fonctionner. Voici trois classes à titre d'exemple:Rails 3 héritage de table unique w/has_many question

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

class Paragraph < ActiveRecord::Base 
    belongs_to :article 
end 

class SportsArticle < Article 
end 

Et voici la migration qui serait utilisé pour établir ceci:

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 

Lorsque je l'ai mis de cette façon et je tente de créer une nouvelle SportsArticle , par exemple en procédant comme suit:

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

Je reçois toujours l'erreur suivante:

"TypeError: impossible de convertir la chaîne en entier"

Je n'ai aucune idée de comment résoudre ce problème et j'ai essayé de trouver une solution en ligne en vain. Est-ce que quelqu'un qui a de l'expérience avec les modèles d'ITS voit quelque chose de mal? Voici le lien vers la documentation sur la méthode de création si elle aidera à diagnostiquer le problème: http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-create

Répondre

0

Le erreur a été provoquée en raison d'une collision de nommage. J'utilisais un nom pour un de mes modèles appelé "attributs" qui causait le problème. L'indice qui a finalement diagnostiqué le problème vient du Rails Association Documentation.

0

Renommez: le type à quelque chose d'autre, comme: article_type

par exemple:

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

Cela n'a pas fonctionné. Dans la documentation sur les rails, il est dit que vous êtes censé nommer la colonne "type" pour implémenter la STI http://api.rubyonrails.org/classes/ActiveRecord/Base.html – Abe

+0

Merci pour le porkeypop de réponse, il a finalement fini par être une collision de nommage d'un genre différent. – Abe

Questions connexes