1

親クラスにも has_many 関係が含まれているRails 3で単一テーブル継承モデルをセットアップしようとしています。残念ながら、私はそれを機能させることができません。例として、次の 3 つのクラスを示します。

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 メソッドに関するドキュメントへのリンクを次に示します

4

2 に答える 2

0

名前の衝突が原因でエラーが発生していました。問題の原因となっている「属性」というモデルの名前を使用していました。最終的に問題を診断したヒントは、RailsAssociationのドキュメントから得られました。

于 2010-10-24T21:07:07.780 に答える
0

:type の名前を :article_type のように別の名前に変更してみてください

例えば:

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