передать параметры обратному вызову before_create в rails 3 - PullRequest
3 голосов
/ 16 сентября 2011

Итак, я внедряю систему обмена сообщениями а-ля Facebook для платформы социальной сети, вдохновленной этим учебным пособием http://www.novawave.net/public/rails_messaging_tutorial.html

У меня есть базовая функция отправки сообщений, и теперь я хочу, чтобы пользователь мог сохранить черновик для последующей отправки.

при создании сообщения он создает копии этого сообщения для каждого получателя в методе 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 => {: controller => "sent",: action => "create"} do | 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>

<% end%>

Есть предложения?

спасибо

редактировать: больше кода!

Ответы [ 2 ]

1 голос
/ 16 сентября 2011

Я думаю, что вы можете сохранить сообщение и получатели сообщения с помощью Ajax в базе данных. Таким образом, вы можете продолжить с сообщения после слов, похожих на gmail.

Другой вариант заключается в том, чтобы в форме было 2 разных сообщения для «Отправить» и «Сохранить как черновик», и на основе параметра фиксации можно обработать сообщение.

1 голос
/ 16 сентября 2011

Вы можете иметь что-то вроде условных обратных вызовов

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

и виртуальный атрибут, позволяющий либо создать копии сообщения для получателей, либо просто сохранить его как черновик.

...