2012-02-28 9 views
0

私は3つの配列を持っていProjectあります複数の配列でユーザーに電子メールを送るにはどうすればいいですか?

  • admins
  • members
  • readers

が、私はこれらのアレイの各々で様々なユーザーを電子メールで送信します。 現在、それが好きでやっている:

@project.admins.each do |u| 
    ProjelementMailer.notify_update(u) 
end 

@project.members.each do |u| 
    ProjelementMailer.notify_update(u) 
end 

@project.readers.each do |u| 
    ProjelementMailer.notify_update(u) 
end 

は私がより簡潔な方法でこれを表現することができますよりDRY Railsのアプローチがありますか?

答えて

1

ただ、すべてのアレイを組み合わせた:

(@project.admins + @project.members + @project.readers).each do |u| 
    ProjelementMailer.notify_update(u) 
end 

はまた、重複を削除するために結合アレイ上uniqを呼び出すこともできます。よりリテラルな動的アプローチの場合:

[:admins, :members, :readers].each do |sym| 
    @project.send(sym).each do |u| 
    ProjelementMailer.notify_update(u) 
    end 
end 
+0

おかげでアンドリューを返されていません。また、よりリテラルな動的アプローチでコードを理解してください。 –

+0

@DanielMay動的言語は、同じ(または同様の)タスクを達成する多くの方法を可能にします。まれに1つのベスト*ソリューションがありますが、特定のアプリケーションに最も適しているものを見つけるためには、それらを探索することは常にいいです。 –

+0

ええ、私はダイナミックな言語ではあまり育ちませんでしたし、できるだけパターン(とアンチパターン)に順応しようとしています。このおかげでありがとう:) –

1

すべての配列を|すべてのUNIQのユーザーのために、その上にそれぞれを呼び出しますが、必ずすべてのメソッドの管理者を作成し、メンバーは、読者がnilのオブジェクトに

(@project.admins | @project.members | @project.readers).each do |u| 
    ProjelementMailer.notify_update(u) 
end 
+0

ニース。配列に関して '|'について知りませんでした。それをビット単位でORと呼ぶわけではありませんが、それは連合を実行する方法ではありません(http://ruby-doc.org/core-1.9.3/Array.html#method-i-7C)。 –

+0

ええ、その組合の方法 –

+0

私はそれが何であるかを知っていますが、あなたの答えには "|(ビットまたは)"と言ってそれは非常に異なっていると言っています。 –

関連する問題