2010-04-01 2 views
1

Я хочу, чтобы пользователи вводили список логинов в форме, разделенных запятыми, для получения уведомления по электронной почте при создании нового комментария/сообщения. Я не хочу хранить этот список в базе данных, поэтому я бы использовал form_tag_helper 'text_area_tag' вместо текстового поля helper. У меня есть наблюдатель «after_save», который должен отправить электронное письмо при создании комментария/сообщения. Насколько мне известно, событие after_save принимает только объект модели в качестве аргумента, поэтому как передать этот немодельный резервный список логинов наблюдателю, который будет передан методу Mailer, который использует их в списке cc.rails arguments to after_save observer

благодаря

ответ

4

Вы хотите сохранить список в virtual attribute. Он будет доступен в обратном вызове after_save.

+0

спасибо, я попробую это. – user290870

+0

благодаря этим работам – user290870

0

Я думаю, что лучший способ будет использовать модель бестабличной. Посмотрите на пример Railscatsts screencast. Это довольно просто.

+0

Я хочу сохранить другие поля формы в таблице. Просто не это конкретное поле со списком логинов. Должен ли я создавать для этого отдельную модель? – user290870

+0

Почему бы и нет? У вас такая же ситуация, как и в этом скринкасте. Это рекомендация для новых комментариев или сообщений. Вы можете даже иметь полиморфную связь с этой моделью, если комментарии и сообщения - это разные модели в вашем приложении (они рекомендуются). Ищите такой скринкаст для деталей. – Voldy

+0

Привет, Я хочу сохранить все поля в моей форме, кроме одного в базе данных. Создание отдельной модели только для одного поля здесь кажется излишним, хотя это может сработать. Я думаю, что создание новой переменной экземпляра для текущего объекта модели с использованием методов getter и setter является гораздо лучшим решением. Спасибо – user290870

0

Вот модели, которые вам понадобятся (по форме) и виртуальный атрибут в пользовательской модели.

# app/models/user.rb 
class User < ActiveRecord::Base 
# virutal attribute and validations 
attr_accessor :unpersisted_info 
validates_presence_of :unpersisted_info 
end 

# app/models/user_observer.rb 
class UserObserver < ActiveRecord::Observer 
    def after_save(user) 
    # logic here... 
    end 
end 

# form for view... 
<%form_for @user do |f|%> 
    <%= f.text_field :unpersisted_info %> 
    <%= f.submit "Go" %> 
<%end%> 
+0

в методе after_save у вас есть доступ к атрибуту "unpersisted_info" def after_save (пользователь) self.unpersisted_info.split (","). Each {| item | p item} end – seanb123

Смежные вопросы