Я создаю приложение, в котором есть пользователи и учетные записи.Моя проблема в том, что я сначала создал модель пользователей и функцию аутентификации, но потом понял, что мне нужно, чтобы пользователи принадлежали учетным записям.
Если я зарегистрирую пользователя на маршруте http://lvh.me:3000/signup
, он создаст нового пользователя, отправитАктивация электронной почты и активация пользователя.Прекрасно работает, за исключением того, что не создает Account
.Но теперь мне нужно добавить account
в микс.Если я зарегистрируюсь по моему новому маршруту http://lvh.me:3000/accounts/new
, это создаст учетную запись и пользователя, но мне нужно отправить электронное письмо для активации, чтобы я мог фактически активировать пользователя.Я не могу заставить свой контроллер Account
вызвать @user.send_activation_email
в действии create
внутри моего UserController
- см. Код ниже.Я знаю, что то, что у меня есть ниже, не является правильным, но я ударился о кирпичную стену и не уверен, куда идти.
user.rb
class User < ApplicationRecord
has_many :memberships
has_many :accounts, through: :memberships
accepts_nested_attributes_for :accounts
...
# Sends activation email.
def send_activation_email
UserMailer.account_activation(self).deliver_now
end
...
account.rb
class Account < ActiveRecord::Base
belongs_to :owner, class_name: 'User'
accepts_nested_attributes_for :owner
has_many :memberships
has_many :users, through: :memberships
end
accounts_controller.rb
class AccountsController < ApplicationController
def new
@account = Account.new
@account.build_owner
end
def create
@account = Account.new(account_params)
if @account.save
@user.send_activation_email
flash[:info] = 'Please check your email to activate your account.' # Use this for registered users
# flash[:info] = 'Please have user check their email to activate their account.' # Use this for admin created users
redirect_to root_url
else
flash.now[:alert] = 'Sorry, your account could not be created.'
render :new
end
end
private
def account_params
params.require(:account).permit(:organization, owner_attributes: [:name, :email, :password, :password_confirmation])
end
end
users_controller.rb
class UsersController < ApplicationController
...
def create
@user = User.new(user_params)
if @user.save
@user.send_activation_email
flash[:info] = 'Please check your email to activate your account.' # Use this for registered users
# flash[:info] = 'Please have user check their email to activate their account.' # Use this for admin created users
redirect_to root_url
else
render 'new'
end
end
...
def user_params
params.require(:user).permit(:name, :email, :password, :password_confirmation, accounts_attributes: [:organization])
end
...