raking

时间:2015-07-14 02:38:28

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 sqlite

我今天创建了一个新的Rails 4应用程序。我做过很多次的事。创建了一个基本的用户模型。

    class User < ActiveRecord::Base
        before_save { self.email = email.downcase }
        VALID_EMAIL_REGEX = /\A[\w+\-.]+@[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

但是当我尝试在rails控制台中验证以测试用户模型时,我得到NoMethodError: undefined method add_index。我试过回滚并重新运行迁移,但没有变化。该方法在我的class User < ActiveRecord::Base中正确定义,并且已迁移到db。

我想知道是因为我正在使用sqlite3进行开发而pg用于部署(heroku),在这方面可能会搞砸一些东西,但我在这方面没有足够的经验来更好地了解。如果有帮助,我可以提供我的gemfile。

1 个答案:

答案 0 :(得分:1)

您不应该在模型中使用add_index。那里没有地方,完全删除那条线。