【问题标题】:Rails 3 single table inheritence w/ has_many questionRails 3 单表继承 w/has_many 问题
【发布时间】:2010-10-25 05:07:07
【问题描述】:

我一直在尝试在 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: 无法将 String 转换为 Integer"

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

【问题讨论】:

    标签: ruby-on-rails has-many single-table-inheritance


    【解决方案1】:

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

    例如:

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多