0

devise-invitablegemを使用して一度に複数の招待状を送信したい。

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

1つの解決策は、招待方法でカンマ区切りのメールを渡すことだと思いますが、どうすれば渡すことができますか? 私は本当に方法がわかりません。

他に解決策があれば教えてください。

ありがとう。

4

1 に答える 1

2

私はこの問題に悩まされていましたが、最終的に一度に複数の招待メールを送信する解決策を得ました.

以下に、これを可能にする方法をコードで説明します。

これが私の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][]」という名前のテキストボックスを1つ取得します(このレールを使用すると、フォームを送信するときに電子メール配列が自動的に作成され、パラメーターで送信されるため、重要です)

また、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 からすべてのメールを取得し、invite メソッドに渡して招待状を送信します。

私のコントローラー:-

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

それでおしまい...

それでも質問がある場合は、コメントしてください。

于 2015-03-19T05:50:18.887 に答える