Ruby on rails Admin设置为true,在忘记在应用程序中首先注册管理员电子邮件后,无法在Rails上工作

Ruby on rails Admin设置为true,在忘记在应用程序中首先注册管理员电子邮件后,无法在Rails上工作,ruby-on-rails,devise,admin,rails-console,Ruby On Rails,Devise,Admin,Rails Console,我已通过Desive gem创建了用户注册/签名。为了给用户一个admin角色,我在users表中添加了一个名为“admin”的新列(在终端中给出命令,后跟rake db:migrate),并默认将all设置为“false”: class AddAdminToUsers < ActiveRecord::Migration def change add_column :users, :admin, :boolean, :default => false end

我已通过Desive gem创建了用户注册/签名。为了给用户一个admin角色,我在users表中添加了一个名为“admin”的新列(在终端中给出命令,后跟rake db:migrate),并默认将all设置为“false”:

class AddAdminToUsers < ActiveRecord::Migration

  def change

    add_column :users, :admin, :boolean, :default => false

  end

end
问题是,我忘了先在应用程序中注册那个特定的用户,结果出现了一个错误。我回到上一次迁移,在应用程序中注册了该用户,之后我在change方法中添加了上面的行,我没有收到更多的错误。然而,该应用程序并没有将此特定电子邮件视为管理员,当我在db控制台中搜索时,该特定用户的管理员列设置为“false”。我不知道怎么解决它

  • 是否可以使用SQL数据操作语言(如
    updateusers set admin=true(…)
    )直接在控制台中更改“false”值

  • 如果我再次尝试使用UpdateUsers添加新电子邮件,它会抱怨由于已经存在UpdateUsers迁移而产生“冲突”。如何添加管理员角色设置为true的新用户


创建管理员/用户的另一种方法是使用“db”目录中的seed.rb文件

这是我的,但你可以改变

User.destroy_all

frank = User.new
frank.email = "blahblah@gmail.com"
frank.password = "password"
frank.password_confirmation = "password"
frank.admin = "true"
frank.save!
然后在命令提示符下运行

rake db:seed

如果要删除所有用户,请仅保留“User.destroy_all”。如果你不想,就把它拿出来。我不完全确定“真的”,它可能不需要引用

当您第二次运行
rake db:migrate
时(在运行它一次以应用
UpdateUsers
迁移之后),它将不会在中运行脚本,因为它认为已经应用了迁移

您必须回滚迁移,并通过以下步骤再次应用迁移:

> rake db:rollback
> rake db:migrate
同时执行这两项操作有一个快捷方式:

> rake db:migrate:redo
这里一个有用的技巧是使用
rake db:migrate:status
查看在任何给定时间应用了哪些迁移

阅读更多关于这个的信息

有关添加管理员用户的更具体问题:

我通常直接从控制台进行设置,因为这是一次性设置

$ rails console
> u = User.find_by( email: 'administradora@gmail.com' )
> @u.update_attribute :admin, true

您也可以通过运行sql查询直接在数据库中执行此操作。

非常感谢!我不知道这个“种子”文件。我解决了回滚迁移功能!万分感谢!!!我试图投票,但显然我没有特权:|对不起,谢谢,不用担心。祝你好运你救了我一天!非常感谢你!它起作用了!老实说,我很害怕在Rails中试验命令,因为我总是有错误,我不知道它们是什么!万分感谢!!!不要害怕实验,因为它只是代码,而不是某人的生命:-)看看格伦·范德堡的这篇演讲;那次演讲给了我很大的自由,让我可以在编码时犯错误。
$ rails console
> u = User.find_by( email: 'administradora@gmail.com' )
> @u.update_attribute :admin, true