2011-09-16 30 views
3

讓我實現一個郵件系統點菜的Facebook通過本教程激發了社交網絡平臺http://www.novawave.net/public/rails_messaging_tutorial.html參數傳遞給before_create回調中軌3

我發送郵件工作的基本的funcionality現在我想用戶以便能夠保存稍後發送的草稿。

創建消息時,它會爲我的消息模型的before_create方法中的每個收件人創建此消息的副本。

to.each do |recipient| 
    recipient = User.find(recipient) 
    message_copies.build(:folder_id => recipient.inbox.id, :recipient_id => recipient.id, :read => false) 
    end 

我想參數傳遞給before_create回調,這樣它就知道它是否應該建立消息拷貝到收件人或者簡單地將其保存爲草稿,這樣我就可以用同樣的方法在不改變模型。

我想過跳過這個特殊情況的回調,但無法理解如何去做。

下面是的form_for @message創建新消息

<%的視圖,:URL => {:控制器=> 「發送」,:動作=> 「創建」}做| F | %>

<select name="message[to][]" multiple="multiple"> 
    <%= options_from_collection_for_select(User.find(:all), :id, :login, @message.to) %> 
</select> 

<p> 
    Subject: <%= f.text_field :subject %> 
</p> 

<p> 
    Body: 
    <br /> 
    <%= f.text_area :body %> 
</p> 

<p> 
    <%= submit_tag "Send", :name => 'do_send' %> 
    <%= submit_tag "Save", :name => 'save_draft' %> 
</p> 

<%結束%>

有什麼建議?

謝謝

編輯:更多代碼!

回答

1

我想你可以在數據庫中藉助Ajax存儲消息和消息的接收者。這樣,您可以在類似gmail的病房之後繼續留言。

另一種選擇是在窗體上爲「發送」和「另存爲草稿」提供2個不同的提交,並基於提交參數處理消息。

+0

我根本不瞭解Ajax。我確實有兩種不同的表單提交,導致兩種不同的行爲。問題是我想使用相同的構建方法,因此使用相同的回調。也許我不應該? – Arthur

1

你可能會碰到這樣的條件回調

class Comment < ActiveRecord::Base 
    before_create :send_email_to_author, :if => :author_wants_emails?, 
    :unless => Proc.new { |comment| comment.post.ignore_comments? } 
end 

和虛擬屬性來決定是建立信息複製到收件人或簡單地將其保存爲草稿。

+0

我不知道虛擬屬性是什麼。檢查此 – Arthur

+0

mmm ... http://railscasts.com/episodes/16-virtual-attributes – Bohdan

+0

所以:author_wants_emails應設置點擊保存按鈕?我應該在哪裏做? – Arthur