在 rails 中使用 devise-invitable gem 发送多个邀请
Send multiple invitation using devise-invitable gem in rails
我想使用 devise-invitable
gem.
一次发送多个邀请
new.html.erb
<h2>
<%= t "devise.invitations.new.header" %>
</h2>
<%= form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :post} do |f| %>
<%= devise_error_messages! %>
<div>
<% resource.class.invite_key_fields.each do |field| -%>
<p><%= f.label field %><br />
<%= f.email_field field, placeholder: "Invitation email" %></p>
<% end -%>
<%= f.collection_select(:role_id, Role.all, :id, :role_name, :prompt => true) %>
</div>
<p>
<%= f.submit t("devise.invitations.new.submit_button") %>
</p>
<% end %>
我的控制器:-
class Users::InvitationsController < Devise::InvitationsController
def create
exit
if params[:user][:email]== "" || params[:user][:role_id] == ""
flash[:alert]="Please enter email first and Select any role for invitees"
redirect_to new_user_invitation_path
else
if User.invite!(:email => params[:user][:email], :company_id => current_user.id, :type => 'Employee', :role_id => params[:user][:role_id])
flash[:notice]="Invitation is send successfully."
redirect_to new_user_invitation_path
else
flash[:alert]="Invitation is not send."
redirect_to new_user_invitation_path
end
end
end
end
我认为一种解决方案是在邀请方法中传递以逗号分隔的电子邮件,但我该如何传递呢?真不知道怎么办。
如果您有任何其他解决方案,请告诉我。
谢谢。
我遇到了这个问题,但最后我找到了一次发送多封邀请电子邮件的解决方案。
下面我将解释我的代码如何实现这一点。
这是我的 html 观点。
new.html.erb
<h2>
<%= t "devise.invitations.new.header" %>
</h2>
<%= form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :post} do |f| %>
<%= devise_error_messages! %>
<div>
<% resource.class.invite_key_fields.each do |field| -%>
<%= f.label field %><br />
<%= f.email_field field, name: "user[email][]", placeholder: "Invitation email", required: true %></p>
<div id="createNewTextbox" >
</div>
<a id="btnLinkCreate" href="#" onClick="create_new();">
+ INVITE MORE
</a>
<% end -%>
</div>
<p>
<%= f.submit t("devise.invitations.new.submit_button") %>
</p>
<% end %>
在此我默认使用一个文本框,名称为:"user[email][]"(这很重要,因为使用此 rails 会自动创建电子邮件数组并在您提交表单时发送参数)
我还使用 JavaScript 生成动态文本框,当单击邀请更多 link 按钮时,它将在 div 下面创建:
<div id="createNewTextbox" >
</div>
<a id="btnLinkCreate" href="#" onClick="create_new();">
+ INVITE MORE
</a>
这是我 JavaScript 的动态文本框代码。
$('#createNewTextbox').append('<input type="email" id="email'+i+'" name="user[email][]" placeholder="Invitation email" required/>');
现在您可以看到我为动态文本框 (name="user[email][]") 指定了相同的名称,因此 rails 会自动创建这样的哈希数组:
"user" => { "email" => { "email-1","email-2","email-3"... } }
现在这个哈希数组传入创建方法,我们从参数中获取每封电子邮件并将其提供给邀请方法以发送邀请。
我的控制器:-
class Users::InvitationsController < Devise::InvitationsController
def create
params[:user][:email].each do |email|
User.invite!(:email => email)
end
end
end
就是这样...
如果您还有任何疑问,请告诉我评论。
我想使用 devise-invitable
gem.
new.html.erb
<h2>
<%= t "devise.invitations.new.header" %>
</h2>
<%= form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :post} do |f| %>
<%= devise_error_messages! %>
<div>
<% resource.class.invite_key_fields.each do |field| -%>
<p><%= f.label field %><br />
<%= f.email_field field, placeholder: "Invitation email" %></p>
<% end -%>
<%= f.collection_select(:role_id, Role.all, :id, :role_name, :prompt => true) %>
</div>
<p>
<%= f.submit t("devise.invitations.new.submit_button") %>
</p>
<% end %>
我的控制器:-
class Users::InvitationsController < Devise::InvitationsController
def create
exit
if params[:user][:email]== "" || params[:user][:role_id] == ""
flash[:alert]="Please enter email first and Select any role for invitees"
redirect_to new_user_invitation_path
else
if User.invite!(:email => params[:user][:email], :company_id => current_user.id, :type => 'Employee', :role_id => params[:user][:role_id])
flash[:notice]="Invitation is send successfully."
redirect_to new_user_invitation_path
else
flash[:alert]="Invitation is not send."
redirect_to new_user_invitation_path
end
end
end
end
我认为一种解决方案是在邀请方法中传递以逗号分隔的电子邮件,但我该如何传递呢?真不知道怎么办。
如果您有任何其他解决方案,请告诉我。
谢谢。
我遇到了这个问题,但最后我找到了一次发送多封邀请电子邮件的解决方案。
下面我将解释我的代码如何实现这一点。
这是我的 html 观点。
new.html.erb
<h2>
<%= t "devise.invitations.new.header" %>
</h2>
<%= form_for resource, :as => resource_name, :url => invitation_path(resource_name), :html => {:method => :post} do |f| %>
<%= devise_error_messages! %>
<div>
<% resource.class.invite_key_fields.each do |field| -%>
<%= f.label field %><br />
<%= f.email_field field, name: "user[email][]", placeholder: "Invitation email", required: true %></p>
<div id="createNewTextbox" >
</div>
<a id="btnLinkCreate" href="#" onClick="create_new();">
+ INVITE MORE
</a>
<% end -%>
</div>
<p>
<%= f.submit t("devise.invitations.new.submit_button") %>
</p>
<% end %>
在此我默认使用一个文本框,名称为:"user[email][]"(这很重要,因为使用此 rails 会自动创建电子邮件数组并在您提交表单时发送参数)
我还使用 JavaScript 生成动态文本框,当单击邀请更多 link 按钮时,它将在 div 下面创建:
<div id="createNewTextbox" >
</div>
<a id="btnLinkCreate" href="#" onClick="create_new();">
+ INVITE MORE
</a>
这是我 JavaScript 的动态文本框代码。
$('#createNewTextbox').append('<input type="email" id="email'+i+'" name="user[email][]" placeholder="Invitation email" required/>');
现在您可以看到我为动态文本框 (name="user[email][]") 指定了相同的名称,因此 rails 会自动创建这样的哈希数组:
"user" => { "email" => { "email-1","email-2","email-3"... } }
现在这个哈希数组传入创建方法,我们从参数中获取每封电子邮件并将其提供给邀请方法以发送邀请。
我的控制器:-
class Users::InvitationsController < Devise::InvitationsController
def create
params[:user][:email].each do |email|
User.invite!(:email => email)
end
end
end
就是这样...
如果您还有任何疑问,请告诉我评论。