我需要在用户模型中添加一条记录,使其成为管理员用户。
@u = User.new(email: 'admin@gmail.com')
@u.save
当我rake db:migrate
我收到此错误时
rake aborted!
ActiveRecord::StatementInvalid: Could not find table 'users'
/usr/local/rvm/gems/ruby-2.1.5@rails4/gems/activerecord-4.2.0/lib/active_record/connection_adapters/sqlite3_adapter.rb:517:in `table_structure'
是的,我用devise来创建注册登录
class DeviseCreateUsers < ActiveRecord::Migration
def change
create_table(:users) do |t|
## Database authenticatable
t.string :email, null: false, default: ""
t.string :encrypted_password, null: false, default: ""
user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_one :profiles
# One user has one profile only
@u= User.new
@u.admin@gmail.com
end
add_admin_to_users.rb
class AddAdminToUsers < ActiveRecord::Migration
def change
add_column :users, :admin, :boolean, :default => false
end
end
update_users.rb
class UpdateUsers < ActiveRecord::Migration
def change
@u = User.find_by( email: 'admin@gmail.com')
@u.update_attribute :admin , true
#@u.update_attributes(:admin ,true)
end
end
错误
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
undefined method `update_attribute' for nil:NilClass/home/ubuntu/workspace/hrApp/db/migrate/20150404180803_update_users.rb:6:in `change'
答案 0 :(得分:1)
从我所看到的,你似乎有一些代码在rails rake db:migrate
命令期间加载环境时正在执行。
这意味着你可能有一些看起来像这样的代码
class User < ActiveRecord::Base
# ... some other code
@u = User.new(email: 'admin@gmail.com')
@u.save
end
当rake加载rails环境时执行该代码,这可能不是你想要的或者在任何情况下应该做的。
移动代码以创建db/seed.rb
文件的新管理员。然后,您可以执行迁移,然后通过运行rake db:seed
此外,请勿使用迁移来修改数据库中的数据,以确定您要执行的操作。
答案 1 :(得分:0)
移动
@u = User.new(email: 'admin@gmail.com')
@u.save
到app/db/seeds.rb
。然后rake db:migrate
创建表(如果它还不存在)和rake db:seed
来创建您喜欢的任何数据(本例中是管理员用户)