2015-07-14 4 views
0

Сегодня я создал новое приложение Rails 4. Что-то я делал много раз. Создана базовая модель пользователя, рассмотренная здесь.Rails NoMethodError при сгребании

class User < ActiveRecord::Base 
     before_save { self.email = email.downcase } 
     VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i 
     validates :name, presence: true, length: { maximum: 50 } 
     validates :email, presence: true, length: { maximum: 100 }, 
        format: { with: VALID_EMAIL_REGEX }, 
        uniqueness: { case_sensitive: false } 
     add_index :users, :email, unique: true 
     has_secure_password 
     validates :password, length: { minimum: 6 } 
    end 

Я выполнил эту миграцию с rake db:migrate:

class AddIndexToUsersEmail < ActiveRecord::Migration 
     def change 
     add_index :users, :email, unique: true 
     end 
    end 

Мой schema.rb показывает, что миграция работала:

ActiveRecord::Schema.define(version: 20150714015826) do 

     create_table "users", force: :cascade do |t| 
     t.string "name" 
     t.string "email" 
     t.datetime "created_at",  null: false 
     t.datetime "updated_at",  null: false 
     t.string "password_digest" 

    end 

     add_index "users", ["email"], name: "index_users_on_email", unique: true 

    end 

Но когда я пытаюсь проверить в консоли рельсы, чтобы проверить модель пользователя, я получаю NoMethodError: undefined method add_index. Я пробовал просто откидываться назад и переносить миграцию, но никаких изменений. Метод определен правильно в моем class User < ActiveRecord::Base, и он перенесен в db.

Мне интересно, если я использую sqlite3 для разработки и pg для развертывания (heroku), что-то может быть испорчено в этом отношении, но я недостаточно опыт на этом фронте, чтобы лучше знать. Я могу предоставить свой gemfile, если это поможет.

ответ

1

Вы не должны использовать add_index в своей модели. Этого нет места, полностью удалите эту строку.