2010-10-22 85 views
1

我一直试图在Rails 3中设置单表继承模型,其中父类也包含has_many关系。不幸的是我无法让它工作。这里有三个班为例:Rails 3单表继承w/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") 

我总是得到以下错误:

“类型错误:无法转换成字符串整数”

我不知道如何解决这个问题,并试图在网上找到一个解决办法都无济于事。有STI模型经验的人会看到有什么不对吗?这里的链接到文件的创建方法,如果将诊断问题有所帮助: http://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-create

回答

0

的错误是由于命名冲突造成的。我为我的一个模型使用了一个名为“属性”的名称,这导致了问题。最终诊断问题的提示来自Rails Association Documentation

0

尝试重命名:种类别的东西,如:article_type

如:

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

这没有奏效。在rails文档中,它说你应该命名列“type”来实现STI http://api.rubyonrails.org/classes/ActiveRecord/Base.html – Abe 2010-10-23 19:57:52

+0

感谢porkeypop的响应,它最终最终成为了一种不同类型的命名冲突。 – Abe 2010-10-24 21:08:18