2011-09-16 3 views
3

レール3にコールバックをbefore_createするhttp://www.novawave.net/public/rails_messaging_tutorial.htmlパスパラメータは、だから私は、このチュートリアルに触発されたソーシャルネットワークのプラットフォーム用のラFacebookのàメッセージングシステムを実装しています

私が働いてメッセージを送信する基本的な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コールバックにパラメータを渡すしたいと思います。

私はこの特定のケースのコールバックをスキップすると考えましたが、それを行う方法を理解できませんでした。 URL => {:コントローラ=> "送信":アクションは=> "作成"}行う| fと|ここ

は、@messageのform_for

<%を新しいメッセージを作成するための図です。 %>

<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のようなワードの後に​​メッセージを続けることができます。

もう1つの方法は、フォームに「送信」と「名前を付けて保存」の2つの異なる送信を行い、メッセージを処理できるコミットパラメータに基づいています。

+0

私はAjaxをまったく知らない。私は2つの異なるアクションにつながるフォーム上の2つの異なる提出物を持っています。問題は、同じビルドメソッドと同じコールバックを使用したかったということです。多分私はしないでください? – 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

so:author_wants_emailsは保存ボタンをクリックして設定する必要がありますか?私はどこでそれをするべきですか? – Arthur

関連する問題