首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rails中使用可设计的宝石发送多个邀请

在rails中使用可设计的宝石发送多个邀请
EN

Stack Overflow用户
提问于 2015-03-17 12:56:02
回答 1查看 2.7K关注 0票数 0

我想一次使用devise-invitable gem发送多个邀请。

new.html.erb

代码语言:javascript
复制
<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 %>

我的控制器:-

代码语言:javascript
复制
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

我认为一个解决方案是在邀请方法中传递逗号分隔的电子邮件,但如何传递呢?我真的不知道怎么做。

如果你有其他解决办法,请告诉我。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-19 05:50:18

我麻烦这个问题,但最终我得到了解决办法,一次发送多个邀请电子邮件。

下面我解释一下我的代码是如何成为可能的。

这是我的html视图。

new.html.erb

代码语言:javascript
复制
<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 %>

在这里,我使用一个默认的文本框名称:"useremail“(这很重要,因为使用这个rails会自动创建电子邮件数组并在提交表单的情况下发送params )。

我还使用JavaScript生成动态文本框,当单击invite更多链接按钮时,它将在div下面创建:

代码语言:javascript
复制
<div id="createNewTextbox" >
</div>
<a id="btnLinkCreate" href="#" onClick="create_new();">
  + INVITE MORE
</a>

这是我的JavaScript动态文本框代码.

代码语言:javascript
复制
$('#createNewTextbox').append('<input type="email" id="email'+i+'" name="user[email][]" placeholder="Invitation email" required/>');

现在您可以看到,我给动态文本框(name="useremail")取了相同的名称,因此rails自动创建哈希数组,如下所示:

代码语言:javascript
复制
"user" => { "email" => { "email-1","email-2","email-3"... } } 

现在,这个散列数组被传入创建方法,在该方法中,我们从params中获取每封电子邮件,并将其交给invite方法来发送邀请。

我的控制器:-

代码语言:javascript
复制
class Users::InvitationsController < Devise::InvitationsController
   def create
      params[:user][:email].each do |email|
         User.invite!(:email => email)
      end
   end
end

就这样..。

如果您还有任何疑问,请告诉我评论。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29099657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档