私はモデルを作成しましたRubyスクリプト/モデルを生成しますArticle(simple enuff)
移行ファイルcreate_articles.rbは次のとおりです。
def self.up
create_table :articles do |t|
t.column :user_id, :integer
t.column :title, :string
t.column :synopsis, :text, :limit => 1000
t.column :body, :text, :limit => 20000
t.column :published, :boolean, :default => false
t.column :created_at, :datetime
t.column :updated_at, :datetime
t.column :published_at, :datetime
t.column :category_id, :integer
end
def self.down
drop_table :articles
end
end
Rake:db migrateコマンドを実行すると、rakeが中止されましたというエラーが表示されます。 「初期化されていない定数CreateArticles。」
このエラーが引き続き発生する理由を誰かが知っていますか?
ファイル名とクラス名が同じであることを確認してください(クラス名がキャメルケースである場合を除きます)。移行ファイルの内容は次のようになり、少し簡略化されます。
#20090106022023_create_articles.rb
class CreateArticles < ActiveRecord::Migration
def self.up
create_table :articles do |t|
t.belongs_to :user, :category
t.string :title
t.text :synopsis, :limit => 1000
t.text :body, :limit => 20000
t.boolean :published, :default => false
t.datetime :published_at
t.timestamps
end
end
def self.down
drop_table :articles
end
end
このエラーが発生し、それが移行ファイル名によるものではない場合は、別の解決策が考えられます。次のように、マイグレーションでクラスを直接開きます。
class SomeClass < ActiveRecord::Base; end
これで、マイグレーション内でSomeClass
を使用できるようになります。
クラス名がconfig/initializers/inflections.rb
。
たとえば、変化が含まれている場合:
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym 'DOG'
end
次に、移行のクラスが次のようになっていることを確認する必要がある場合があります。
class CreateDOGHouses < ActiveRecord::Migration[5.0]
のではなく:
class CreateDogHouses < ActiveRecord::Migration[5.0]
あまり一般的ではありませんが、マイグレーションやモデルなどを生成し、その後その一部を活用形に追加すると、それが発生する可能性があります。 (この例ではNameError: uninitialized constant CreateDOGHouses
クラス名がCreateDogHouses
の場合、少なくともRails 5.)