使用 devise_invitable 在创建新模型记录时发送邀请
Use devise_invitable to send invitation upon creating new model record
非技术背景
我正在使用一款为不同公司管理数据的应用程序。对于这种情况,我有两个模型 User
和 Company
。通常,我们甚至在用户拥有帐户之前就为他们设立了一家公司,然后我们创建用户并通过一些笨拙的方式(例如 phone 调用)将登录信息提供给适当的一方。我们想在创建新公司时向用户发送邀请。
技术信息
我们正在使用 devise 进行用户管理,最近遇到了一个 great little gem called devise_invitable. 它通过 devise 的邮件程序发送邀请。
问题
虽然 devise_invitable 非常适合简单地邀请用户,但我不知道如何让它使用控制器(如 companies_controller
)发出邀请,而不是invitations_controller
。 我的关键挂断是,邀请功能似乎要求我们要么通过 invitations_controller
及其各自的视图,要么使用其 User.invite!
方法。两者都创建用户并发送邀请。这意味着如果我添加 User.invite!到如下所示的创建方法,我将复制用户。
我的问题
如何在 companies_controller
中既创建新公司又邀请新用户?我一直在使用以下方法创建用户(只是不邀请他们)。如果有人知道我应该如何修改它们以使用邀请功能,我将不胜感激。
来自companies_controller
def new
@company=Company.new
@user=@company.user_companies.build.build_user
@folder=@company.folders.build
@stock=@company.stocks.build
@stock.security_class="Common"
@stock.security_series=""
end
def create
@company = Company.new(company_params)
if @company.save
redirect_to users_admin_path(@user), notice: "User successfuly created!"
else
redirect_to welcome_index_path
end
end
无论如何,感谢您的任何想法!
好吧,想通了(或者至少想通了一个出路)。基本上我在 Company
模型中创建了一组虚拟变量,如下所示:
attr_accessor :user_email, :user_fname, :user_lname
然后我更新控制器如下
def new
@company=Company.new
@folder=@company.folders.build
@stock=@company.stocks.build
@stock.security_class="Common"
@stock.security_series=""
end
def create
@company = Company.new(company_params)
if @company.save
invitedUser=User.invite!(email: company_params[:user_email], fname: company_params[:user_fname], lname: company_params[:user_lname], invited_by: current_user)
if invitedUser.save
UserCompany.create(user: invitedUser, company: @company, company_role: "Owner")
redirect_to companies_path, notice: "User successfuly created!"
end
else
redirect_to welcome_index_path
end
end
主要亮点是
- 去掉
@user=@company.user_companies.build.build_user
因为我不想构建用户,我希望它通过invite!
方法创建。
- 使用
User.invite!
创建用户并从提交的表单参数中获取必要的数据
- 手动添加一条join记录(因为我在
Company
和User
之间是多对多的关系)
原来如此。
非技术背景
我正在使用一款为不同公司管理数据的应用程序。对于这种情况,我有两个模型 User
和 Company
。通常,我们甚至在用户拥有帐户之前就为他们设立了一家公司,然后我们创建用户并通过一些笨拙的方式(例如 phone 调用)将登录信息提供给适当的一方。我们想在创建新公司时向用户发送邀请。
技术信息
我们正在使用 devise 进行用户管理,最近遇到了一个 great little gem called devise_invitable. 它通过 devise 的邮件程序发送邀请。
问题
虽然 devise_invitable 非常适合简单地邀请用户,但我不知道如何让它使用控制器(如 companies_controller
)发出邀请,而不是invitations_controller
。 我的关键挂断是,邀请功能似乎要求我们要么通过 invitations_controller
及其各自的视图,要么使用其 User.invite!
方法。两者都创建用户并发送邀请。这意味着如果我添加 User.invite!到如下所示的创建方法,我将复制用户。
我的问题
如何在 companies_controller
中既创建新公司又邀请新用户?我一直在使用以下方法创建用户(只是不邀请他们)。如果有人知道我应该如何修改它们以使用邀请功能,我将不胜感激。
来自companies_controller
def new
@company=Company.new
@user=@company.user_companies.build.build_user
@folder=@company.folders.build
@stock=@company.stocks.build
@stock.security_class="Common"
@stock.security_series=""
end
def create
@company = Company.new(company_params)
if @company.save
redirect_to users_admin_path(@user), notice: "User successfuly created!"
else
redirect_to welcome_index_path
end
end
无论如何,感谢您的任何想法!
好吧,想通了(或者至少想通了一个出路)。基本上我在 Company
模型中创建了一组虚拟变量,如下所示:
attr_accessor :user_email, :user_fname, :user_lname
然后我更新控制器如下
def new
@company=Company.new
@folder=@company.folders.build
@stock=@company.stocks.build
@stock.security_class="Common"
@stock.security_series=""
end
def create
@company = Company.new(company_params)
if @company.save
invitedUser=User.invite!(email: company_params[:user_email], fname: company_params[:user_fname], lname: company_params[:user_lname], invited_by: current_user)
if invitedUser.save
UserCompany.create(user: invitedUser, company: @company, company_role: "Owner")
redirect_to companies_path, notice: "User successfuly created!"
end
else
redirect_to welcome_index_path
end
end
主要亮点是
- 去掉
@user=@company.user_companies.build.build_user
因为我不想构建用户,我希望它通过invite!
方法创建。 - 使用
User.invite!
创建用户并从提交的表单参数中获取必要的数据 - 手动添加一条join记录(因为我在
Company
和User
之间是多对多的关系)
原来如此。