2

最初のユーザーを管理者にしたい。

そのため、文字列属性 admin があり、Devise 登録コントローラーをフィルターまたはオーバーライドする前にいくつか作成する必要があります。何かのようなもの:

if User.first?
  User.admin = "admin"
  User.save
end

これがデバイス登録アクションです

 def new
  resource = build_resource({})
  respond_with resource
end

これを行うためのより良い方法は何でしょうか?

4

3 に答える 3

3

コードがあまり頻繁に実行されないと仮定すると (アプリケーションを初めて実稼働環境で実行する場合のみ)、アプリケーション コードを乱雑にする代わりに、これを 1 回実行する Rake タスクを単純に記述します。

これをあなたの中に入れてくださいRakefile

task :promote_admin => :environment do
  User.first.update_attribute('admin', 'admin')
end

このようにして、インストール中に最初のユーザーを非常に簡単に昇格させながら、コードをクリーンに保ちます。

最初のユーザーを昇格させたい場合はrake promote_admin、コンソールから実行するだけで、最初のユーザーが管理者に昇格されます。

于 2012-07-19T09:35:13.567 に答える
2

私にはうまくいきませんでした。次のように少し変更する必要がありました。

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  after_create :set_admin

  private
  def set_admin
   if  User.count == 1
     User.first.update_attribute(:admin, true)
   else
     return true
   end
  end
end
于 2013-09-19T12:12:32.290 に答える
2

より良い方法は、adminフィールドを として持つことbooleanです。そして、モデルに以下を追加before_filterします。

class User < ActiveRecord::Base
  before_save :set_admin

  private
  def set_admin
    self.admin = User.count == 0
  end
end

これが完全に機能するためには、移行ファイルに次のものを含めることができます

create_table(:users) do |t|
  t.boolean :admin, null: false, default: false
  ...
end

これにより、最初のユーザーが管理者になります。また、すべてのユーザーを削除してから新しいユーザーを登録すると、この新しいユーザーは管理者になります。

于 2012-07-19T09:36:12.500 に答える