1

我一直在尝试在 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")

我总是收到以下错误:

“TypeError:无法将字符串转换为整数”

我不知道如何解决这个问题,并尝试在网上找到解决方案,但无济于事。有 STI 模型经验的人有没有发现任何问题?以下是有关 create 方法的文档的链接,如果它有助于诊断问题: http ://api.rubyonrails.org/classes/ActiveRecord/Base.html#method-c-create

4

2 回答 2

0

尝试将 :type 重命名为其他名称,例如 :article_type

例如:

t.string      :article_type,      :null => false    # for STI
于 2010-10-23T18:31:42.257 回答
0

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

于 2010-10-24T21:07:07.780 回答