我今天创建了一个新的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。
答案 0 :(得分:1)
您不应该在模型中使用add_index
。那里没有地方,完全删除那条线。