次の new および create アクションがあります。これらは、マルチテナント アプリで新しいアカウントを作成するために使用されます。それは正常に動作しますが、初心者であっても、これが正しくないことはわかっています。これが私の質問です。作成アクションをより薄くして、ベストプラクティスに従うにはどうすればよいですか? また、すべてのクエリが 1 つのトランザクションで送信されるようにするにはどうすればよいですか?
ここに私の方法があります:
def new
@account = Account.new
@user = @account.users.build()
@account.accounts_users.build()
respond_to do |format|
format.html # new.html.erb
format.json { render json: @account }
end
end
def create
@account = Account.new(params[:account])
respond_to do |format|
if @account.save
@user = User.find_by_email(params[:account][:users_attributes]["0"][:email])
Profile.create(:user_id => @user.id)
@group = @account.groups.create(:name => 'Default', :user_id => @user)
@group.members.create(:account_id => @account, :user_id => @user)
Role.all.each do |role|
@user.roles_users.create(:role_id => role.id, :account_id => @account)
end
flash[:domain] = @account.subdomain
format.html { redirect_to thanks_url }
format.json { render json: @account, status: :created, location: @account }
else
format.html { render action: "new" }
format.json { render json: @account.errors, status: :unprocessable_entity }
end
end
end
私のモデルは次のとおりです。
- アカウント (has_many :users; :account_users 経由)
- ユーザー (has_one :profile)
- Accounts_User (belongs_to :アカウント、belongs_to :user)
- グループ (has_many :members、as: メンバーシップ、belongs_to :user)
- メンバー (belongs_to :membership, :polymorphic => true)
- プロフィール (belongs_to :user)
- 役割 (has_many :roles_users; has_many :users :through => :roles_users; has_many :accounts, :through => :roles_users)
- RolesUser (belongs_to :user; belongs_to :account; belongs_to :role)