2009-01-05 30 views
43

Tôi tạo ra một mô hình ruby ​​script/tạo ra mô hình Điều (đơn giản enuff)Khi tôi chạy rake: db di chuyển lệnh tôi nhận được một lỗi "uninitialized CreateArticles liên tục"

Dưới đây là các tập tin chuyển đổi 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 

Khi tôi chạy rake: lệnh di chuyển db Tôi nhận được một lỗi cào bị hủy bỏ! "CreateArticles hằng số không khởi tạo."

Có ai biết tại sao lỗi này xảy ra không?

+0

Tên tệp di chuyển của bạn và khai báo lớp học của bạn trông như thế nào? – thetacom

+0

20090106022023_create_articles.rb (tệp di chuyển) ^ Sẽ không giống như trên (khai báo lớp học) – featureBlend

+0

Tuyên bố lớp học của bạn nên bao gồm tất cả những điều trên và trông giống như sau: class CreateMyModel thetacom

Trả lời

91

Hãy chắc chắn rằng tên tập tin của bạn và tên lớp nói điều tương tự (trừ tên lớp được lạc đà cased) .Công nội dung của tập tin chuyển đổi của bạn sẽ giống như thế này, đơn giản hóa cho họ một chút quá:

#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 
+0

Cảm ơn bạn thetacom !!!! Bạn da man dude. Tôi có thể ngu ngốc như thế nào? – featureBlend

+5

Tất cả chúng ta đều có những khoảnh khắc của mình. – thetacom

+0

Quá nhiều 'kết thúc' - nhưng sau đó như vậy đã dán ban đầu – Gareth

2

Nếu bạn gặp lỗi này và KHÔNG phải vì tên tệp di chuyển, có một giải pháp khả thi khác. Mở lớp trực tiếp trong quá trình di chuyển như sau:

class SomeClass < ActiveRecord::Base; end 

Bây giờ, bạn có thể sử dụng SomeClass trong quá trình di chuyển.

0

Có thể nhận được lỗi nhất định nếu tên lớp của bạn không khớp với các cụm từ (như từ viết tắt) từ config/initializers/inflections.rb.

Ví dụ, nếu biến tố của bạn bao gồm:

ActiveSupport::Inflector.inflections(:en) do |inflect| 
    inflect.acronym 'DOG' 
end 

sau đó bạn có thể cần phải chắc chắn rằng các lớp học trong chuyển đổi của bạn là:

class CreateDOGHouses < ActiveRecord::Migration[5.0]

hơn:

class CreateDogHouses < ActiveRecord::Migration[5.0]

Không phải là siêu phổ biến, nhưng nếu bạn tạo ra một di chuyển hoặc một mô hình hoặc một cái gì đó, và sau đó thêm một phần của nó để inflections sau đó nó có thể xảy ra. (Ví dụ ở đây sẽ gây ra NameError: uninitialized constant CreateDOGHouses nếu tên lớp của bạn là CreateDogHouses, ít nhất với Rails 5.)

Các vấn đề liên quan