0

私の問題は、メールでユーザーのリストを作成するアイデアがないことです。同じリストにすべてのユーザーのチェックボックスがあり、最後に[送信]ボタンがあり、すべてのメールをチェック済みのユーザーに送信します。ユーザー、私は一時的に次のように解決しました:1)リスト(インデックスビュー)

<table>
<tr>
<th>Name</th>
<th>Email</th>
<th>Correo</th>
<th>Send Email</th>
<th></th>
<th></th>
<th></th>
 </tr>

<% var1 = []; i = 0 %>

<% @users.each do |user| %>
<tr id=<%= if user.value == 'No dispatched' 
         'c'
       elsif user.value == 'Dispatched'
         'a'
       else
         'b'
       end%> >
<td><%= user.name %></td>
<td><%= user.email %></td>
<td><%= user.value %></td>
<td><% var1[i] = user.name; i=i+1 %>
<%= button_to 'Activate/Desactivate', edit_send_path(user.id), :method => :get %>       </td>
</td>
<td><%= link_to 'Show', user %></td>
<td><%= link_to 'Edit', edit_user_path(user) %></td>
<td><%= link_to 'Destroy', user, :method => :delete, :data => { :confirm => 'Are you sure?' } %></td>
</tr>
<% end %>
</table>

<br />

<%= link_to 'New User', new_user_path %>


<%= button_to 'Send', {:controller => :Send, :action => :send}, :method => :get, :value => 2 %>

2)コントローラーを送信

class SendController < ApplicationController



def send
  @users = User.all
  @users.each do |user|
    if user.value == 'In Process'
    UserMailer.registration_confirmation(user).deliver
    user.value = 'Dispatched'
    user.save
end
  end
  redirect_to :controller => :users, :protocol => 'http'
end

def edit
user = User.find(params[:id])
    if user.value == 'In process'
    user.value = 'No dispatched'
    user.save
elsif user.value == 'No dispatched'
    user.value = 'In process'
    user.save
end
  redirect_to :controller => :users, :protocol => 'http'
end

end

メールが送信されたかどうかを確認するためにフラグ「value」を使用しています

4

1 に答える 1

1

私は私のシニアプロジェクトの一部のためにこれをしました、これが私がそれをした方法です:

ユーザーごとに、doループ内の各ユーザーのIDにリンクされているチェックボックスを追加します。次のようになります。

<td><%= check_box_tag ':multiple_users[]', user.id %></td>

doループの下にsubmit_tagを追加します。この名前は、ユーザーを選択するときに使用したさまざまなアクションを区別するためのものであることに注意してください。

<%= submit_tag "Email Selected Users", :name => "selected"  %>

ビューの上部のどこかに対応するフォームタグを追加します。私のものはハンドラーに移動しますが、あなたの「送信」アクションに移動します。空のハッシュが重要です。

<%= form_tag handle_checkbox_handler_path({}) do %>

メーラーを生成します、私はこれをしませんでした、そして私は方法がわかりません、私はグーグルがすることを確信しています:)あなたはメーラーのための設定ファイルも作る必要があります(再びグーグルこれ、私はあなたを助けることができません)。

そのメーラーを入手したら、その中にアクションを作成してユーザーに電子メールを送信します。

def email_user(email, subject, text_body)
  @text_body = text_body
  mail( :to => email, :subject => subject, :from => "monkey@feet.com")
end

アクションができたら、メールに対応するビューを作成します(私のものは非常に単純で、@text_body値を入力するだけです。

<%= @text_body %>

送信アクションで、複数のユーザーに電子メールを送信します。これが私のコードです。私はRubyの専門家ではありませんが、うまくいきました。また、あまりきれいではないので、読みやすくするためにいくつかコメントを追加します。

params [':multiple_users']。nilでない場合は?#メールを送信するユーザーが複数います

    # Split the passed string and loop through each ID in the string sending an email to each user listed
    params[':users'].split.each do |u|

      # Emailer is my mailer's name, :subject and :message I passed into the action as well. email_user is the name of my mailer action, defined above.
      Emailer.email_user(User.find(u.to_i).email, params[:subject], params[:message]).deliver
    end
      redirect_to users_path, :notice => "Message was sent successfully"

   else # there is only one user to email 
    if Emailer.email_user(params[:email], params[:subject], params[:message]).deliver # Try to send, if fails tell them so
      redirect_to users_path, :notice => "Message was sent successfully"
    else
      redirect_to users_path, :alert => "Message failed to send"
    end
  end
end

これが読みやすく、少なくとも出発点になることを願っています。また、前述のcheck_box_handlerは、問題が発生していないことを確認するためのチェックを行うことも知っておく必要があります。

于 2012-08-16T01:31:57.823 に答える