我在這個上花了幾個小時,而我卻不明白:發送電子郵件給討論主題發表評論的所有用戶
我在做什麼;只要發佈新評論,即可通過電子郵件向在論壇上發表評論的所有用戶發送電子郵件。
我使用user_mailer.rb
def new_post_from_buyer(post)
@post = post
users = User.all.posts.where(:project_id => post.project.id)
mail(:to => '[email protected]',
:bcc => #Somehow turn the users variable i just named into an array of their emails
:subject => 'The Project Poster Posted A New Comment')
end
我.deliver正確安放在posts_controller.rb的UserMailer.new_post_from_buyer(@post)
所以這是有幾件事情要發生,我不能爲我的生活成功地工作。
1 - 我必須讓所有帖子與當前項目相匹配的用戶。 (爲了澄清,一個項目包含一個討論區,其中所有帖子都放在該討論區)郵件程序中的當前代碼拋出'posts'的未定義方法,並且我嘗試過的其他所有方法都不起作用。
2 - 然後我必須採取那些用戶和提取他們的電子郵件(這是在用戶表中的列)
3 - 我需要然後能夠採取其的所有電子郵件並把它變成一個數組以逗號分隔,所以我可以將它放在user_mailer.rb的:bcc中。
你將如何去實現這個工作?一個新的方式與.map或一些我不知道的方法,修復我認爲我需要的代碼?
我正在運行Rails 3.1。
爲了進一步闡明:
- 用戶的has_many帖子。
- 項目has_many文章。
- 發佈belongs_to用戶。
- 發佈belongs_to項目。
謝謝..我認爲| pos | pos.user.email假設包含't'。你的解決方案工作謝謝你好奇;當它創建一個數組時,它是否用逗號分隔每個電子郵件? – 2012-02-02 16:17:56
@JamesF - 它可能包括't',但它不必。在這種情況下,我實際上故意省略了't',因爲該方法的參數名爲'post',即使我不認爲在map方法中會有內容(因爲它位於它自己的塊中) ,我不想冒任何變量名稱衝突的風險。你可以把它改成像'| a_post |'或者甚至是'post'這樣的東西,就像你建議的更清晰一樣,我只是想確保我使用不同的變量名稱來避免名稱衝突和讀取時的清晰度。 – Batkins 2012-02-02 16:23:47
另外,我會建議試用Ruby的'map'方法,直到你掌握它爲止,這是非常有用的,並且還將幫助你理解ruby各種ruby方法如何與'block'語句一起工作。 [這是一個鏈接到'map'方法的文檔](http://ruby-doc.org/core-1.9.3/Array.html#method-i-map)。 – Batkins 2012-02-02 16:27:17