1

この質問と回答を使用して(Deviseでアカウントテーブルとユーザーテーブルの両方を使用)、サインアップするユーザーが同時にアカウントを作成する機能をアプリに正常に設定しました。現在、ユーザーとアカウントの2つのモデルがあります。ユーザーモデルにはaccount_idフィールドがあります。

現在、このユーザー(つまり、アカウントを作成する最初のユーザー)をデフォルトで管理者にする方法に苦労しています。ユーザーモデルに管理フィールドがあります(これは、単一のユーザーモデルを使用するように設定されたActiveAdminで使用するためのものです)。

第二に、管理者ユーザーが他のユーザーを作成する方法を理解するための複数の投稿があることを知っていますが(私はまだDeviseで作業しようとしています)、他のユーザーがすべて割り当てられるように誰かが最も簡単な方法で私を導くことができます同じaccount_id。CanCanを使用して、管理者と非管理者がActiveAdminとアプリケーション一般の両方でアクセスできるものを制御することを計画しています。

どんな援助も大歓迎です。

私の現在のモデルは次のとおりです。

アカウントモデル

class Account < ActiveRecord::Base   
  has_many :users, :inverse_of => :account, :dependent => :destroy      
  accepts_nested_attributes_for :users   
  attr_accessible :name, :users_attributes
end

ユーザーモデル

class User < ActiveRecord::Base
  belongs_to :account, :inverse_of => :users   
  validates :account, :presence => true
  devise :database_authenticatable, :registerable,
    :recoverable, :rememberable, :trackable, :validatable
  attr_accessible :email, :password, :password_confirmation, :remember_me
end

私のコントローラーは次のとおりです。

アカウントコントローラー

class AccountsController < ApplicationController    
  def new     
    @accounts = Account.new     
    @accounts.users.build  
  end    
  def create     
    @account = Account.new(params[:account])     
    if @account.save       
      flash[:success] = "Account created"       
      redirect_to accounts_path     
    else       
      render 'new'     
    end   
  end  
end

ユーザーコントローラー

class UsersController < ApplicationController   
  before_filter :authenticate_user!   
  load_and_authorize_resource # CanCan
  def new     
    @user = User.new   
  end    
  def create         
    @user.skip_confirmation! # confirm immediately--don't require email confirmation     
    if @user.save       
      flash[:success] = "User added and activated."       
      redirect_to users_path # list of all users     
    else       
      render 'new'     
    end   
  end
end 
4

1 に答える 1

3

最初のユーザーを強制的に管理者にするだけの場合は、次のことを試してください。

class Account < ActiveRecord::Base
   after_create :make_first_user_an_admin

   def make_first_user_an_admin
      return true unless self.users.present?
      self.users.first.update_attribute(:admin, true)
   end
end

アカウントが最初に作成されたときに、1回だけ実行されます。また、アカウントに一部のユーザーがいることを確認することをお勧めします。

于 2012-09-13T05:00:33.773 に答える