Pergunta

Eu tenho tentado configurar um modelo de herança de uma única tabela no Rails 3, no qual a classe pai também contém um relacionamento Has_Many. Infelizmente, não consigo fazer funcionar. Aqui estão três classes como exemplo:

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

class Paragraph < ActiveRecord::Base
    belongs_to :article
end

class SportsArticle < Article
end

E aqui está a migração que seria usada para configurar isso:

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

Quando eu o configurei dessa maneira e tento criar um novo SportsAtticle, digamos ao fazer o seguinte:

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

Eu sempre recebo o seguinte erro:

"TypeError: não é possível converter string em número inteiro"

Não tenho ideia de como corrigir esse problema e tentei encontrar uma solução on -line sem sucesso. Alguém que tem experiência com os modelos STI vê algo errado? Aqui está o link para a documentação sobre o método Create, se ele ajudar a diagnosticar o problema:http://api.rubyonrails.org/classes/activerecord/base.html#method-c-create

Foi útil?

Solução 2

O erro estava sendo causado devido a uma colisão de nomeação. Eu estava usando um nome para um dos meus modelos chamados "Atributos", o que estava causando o problema. A dica que acabou diagnosticando o problema veio do Documentação da Associação de Rails.

Outras dicas

Tente renomear: Digite para outra coisa, como: Artigo_type

por exemplo:

t.string      :article_type,      :null => false    # for STI
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top