【问题标题】:Send multiple invitation using devise-invitable gem in rails在 rails 中使用 devise-invitable gem 发送多个邀请
【发布时间】:2015-03-17 12:56:02
【问题描述】:

我想使用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

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

如果您有任何其他解决方案,请告诉我。

谢谢。

【问题讨论】:

  • 试试这个f.email_field :field, "emails[field][]"
  • @Sontya :感谢您的回复,我尝试了您的解决方案,但它给了我一个错误“参数数量错误”
  • 你在哪里得到那个错误..你写了什么
  • @Sontya :谢谢,但我已经解决了我的错误,感谢这个解决方案。它真的对我有用。
  • 得到undefined method "merge" for "emails[field][]":String 任何想法?

标签: ruby-on-rails ruby-on-rails-3 devise devise-invitable


【解决方案1】:

我遇到了这个问题,但最后我得到了一次发送多封邀请电子邮件的解决方案。

下面我解释了我的代码,我是如何做到这一点的。

这是我的 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 生成动态文本框,当点击邀请更多链接按钮时,它将在 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"... } } 

现在这个哈希数组被传入 create 方法,我们从 params 获取每封电子邮件,并将其提供给邀请方法以发送邀请。

我的控制器:-

class Users::InvitationsController < Devise::InvitationsController
   def create
      params[:user][:email].each do |email|
         User.invite!(:email => email)
      end
   end
end

就是这样……

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

【讨论】:

  • 我会试一试。谢谢。
  • 你的 JS 代码在哪里?我的没有触发Uncaught ReferenceError: create_new is not defined...onclick && i is not defined
  • 我的 JS 代码在 assets/javascripts/script.js 中。您必须创建 JS 并在该 JS 中定义“create_new”函数以生成动态文本框。并简单地替换这个 $('#createNewTextbox').append(' '); to $('#createNewTextbox').append('');
  • 可以提供你的JS解决方案吗?
  • function create_new() { $('#createNewTextbox').append(''); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多