尝试在设计中创建管理员用户,但出现错误
Trying to create an Admin user in devise, but I am getting an error
我已经设置并创建了一个用户模型,现在我正在尝试设置一个管理员,但没有任何运气。首先,我按照设计文档中的步骤进行操作:
$ rails generate devise Admin
将我的管理模型更新为:
class Admin < ActiveRecord::Base
devise :database_authenticatable, :registrable, :trackable, :timeoutable, :lockable
end
然后我将迁移更新为:
class DeviseCreateAdmins < ActiveRecord::Migration
def self.up
create_table(:admins) do |t|
t.string :email, :null => false, :default => ""
t.string :encrypted_password, :null => false, :default => ""
t.integer :sign_in_count, :default => 0
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
t.string :unlock_token # Only if unlock strategy is :email or :both
t.datetime :locked_at
t.timestamps
end
end
def self.down
drop_table :admins
end
end
然后我转到 /admins/sign_up 并收到此错误:
NoMethodError in Devise::Registrations#new
undefined method `title' for #<Admin:0x00000005fb17b0>
<%= f.text_field :title, autofocus: true %>
实际上是否必须定义标题,或者是其他原因造成的?
有没有更好的方法在设计中创建单个管理员帐户?
您没有为您的 Admin
模型(管理员 table)创建 title
列 - 因此例外。
您应该在 Rails 中阅读有关向 table 添加列的信息。
要解决此特定问题,请创建新的迁移:
rails g migration add_title_to_admins
在生成的文件中:
add_column :admins, :title, :string
运行 迁移:
rake db:migrate
现在您的管理员将拥有 title
。要添加新属性(数据库中的列),请按照 title
.
的说明进行操作
正如安德烈指出的那样,您必须将 title
列添加到 Admin
table 中,然后(如果 Rails 3)将其设为 attr_accessible
in the Admin
model, otherwise (if Rails 4) white list the params.
Is there a better way to create a single admin account in devise?
是的,有更好的方法来处理管理员帐户。你应该使用rolify gem。它与设计无缝集成,您不需要为管理员准备一个完整的单独 table。这是一个例子:
user = User.find(1)
user.add_role :admin # sets a global role
user.has_role? :admin
=> true
我已经设置并创建了一个用户模型,现在我正在尝试设置一个管理员,但没有任何运气。首先,我按照设计文档中的步骤进行操作:
$ rails generate devise Admin
将我的管理模型更新为:
class Admin < ActiveRecord::Base
devise :database_authenticatable, :registrable, :trackable, :timeoutable, :lockable
end
然后我将迁移更新为:
class DeviseCreateAdmins < ActiveRecord::Migration
def self.up
create_table(:admins) do |t|
t.string :email, :null => false, :default => ""
t.string :encrypted_password, :null => false, :default => ""
t.integer :sign_in_count, :default => 0
t.datetime :current_sign_in_at
t.datetime :last_sign_in_at
t.string :current_sign_in_ip
t.string :last_sign_in_ip
t.integer :failed_attempts, :default => 0 # Only if lock strategy is :failed_attempts
t.string :unlock_token # Only if unlock strategy is :email or :both
t.datetime :locked_at
t.timestamps
end
end
def self.down
drop_table :admins
end
end
然后我转到 /admins/sign_up 并收到此错误:
NoMethodError in Devise::Registrations#new
undefined method `title' for #<Admin:0x00000005fb17b0>
<%= f.text_field :title, autofocus: true %>
实际上是否必须定义标题,或者是其他原因造成的? 有没有更好的方法在设计中创建单个管理员帐户?
您没有为您的 Admin
模型(管理员 table)创建 title
列 - 因此例外。
您应该在 Rails 中阅读有关向 table 添加列的信息。
要解决此特定问题,请创建新的迁移:
rails g migration add_title_to_admins
在生成的文件中:
add_column :admins, :title, :string
运行 迁移:
rake db:migrate
现在您的管理员将拥有 title
。要添加新属性(数据库中的列),请按照 title
.
正如安德烈指出的那样,您必须将 title
列添加到 Admin
table 中,然后(如果 Rails 3)将其设为 attr_accessible
in the Admin
model, otherwise (if Rails 4) white list the params.
Is there a better way to create a single admin account in devise?
是的,有更好的方法来处理管理员帐户。你应该使用rolify gem。它与设计无缝集成,您不需要为管理员准备一个完整的单独 table。这是一个例子:
user = User.find(1)
user.add_role :admin # sets a global role
user.has_role? :admin
=> true