2

アプリ用に Hartl に基づいて独自の認証/承認システムを展開しました。管理者が他のユーザーを管理者にできるようにしたかったので、user.rb ファイルで次のようにしました。

attr_accessible :name, :email, :password, :password_confirmation, :order_id
attr_accessible :name, :email, :password, :password_confirmation, :order_id, :admin, :as => :administrator

これを私のユーザー更新アクションに入れます:

def update
   if current_user.admin?
      if @user.update_attributes(params[:user], :as => :administrator)

これは私にとってはうまく機能しますが、コンソールに移動して入力する必要があるのは面倒です

User.find(2).toggle!(:admin)

または何でも、データベースのリセット後に最初の管理者ユーザーを作成したいとき、またはそのために、コンソールまたは個々の編集を使用して他の管理者を作成する必要があるときはいつでも。「:as => administrator」をシードできるといいので、seed.rb ファイルでこれを試しましたが、うまくいきません (一括割り当てエラー):

    admin = User.create(
    :name => "My Name",
    :email => "my email",
    :password => "password",
    :password_confirmation => "password",
    :admin => true,
    :as => :administrator
)

これを行う方法があるかどうか、何か考えはありますか? それは私の人生をずっと楽にするでしょう。

4

3 に答える 3

2

私が見つけた最も簡単な解決策は、ユーザーを作成した直後に、seeds.rb ファイルで admin を切り替えることでした。このようにして、コンソールで割り当てることなく、「大量」割り当てを回避します。そう:

admin = User.create(
    :name => "My Name",
    :email => "my email",
    :password => "password",
    :password_confirmation => "password"
)
admin.toggle!(:admin)
# I assume "admin.update_attribute(:admin, true)" would work as well.
于 2012-11-12T20:54:39.917 に答える
0

attr_accessible一括割り当てエラーがあるため、User.rbの2行目のみを保持し、エラーの原因となっている1行目を破棄する必要があると思います 。

于 2012-10-24T02:18:09.827 に答える
0

私は同じことを実行しようとしていて、seeds.rbで次のように実行することになります。

# db/seeds.rb
users = User.create({email: 'email@admin.com', username: 'admin', password: 'sEcReT', password_confirmation: 'sEcReT', role: 'admin'},
                    :as => :admin)

# models/user.rb
attr_accessible :email, :username, :password, :password_confirmation, :role, :as => :admin
于 2013-03-03T22:25:29.777 に答える