2010-04-01 80 views
1

我希望用戶在表單上輸入以逗號分隔的登錄列表,以在創建新評論/帖子時通過電子郵件通知。我不想將這個列表存儲在數據庫中,所以我會使用form_tag_helper'text_area_tag'而不是form helper text_field。我有一個'after_save'觀察者,當創建評論/帖子時應該發送一封電子郵件。據我所知,after_save事件只將模型對象作爲參數,那麼如何將這個非模型支持的登錄列表傳遞給觀察者以傳遞給在cc列表中使用它們的Mailer方法。rails after_save observer

謝謝

回答

4

您想將該列表存儲在virtual attribute中。它將在after_save回調中提供。

+0

謝謝,我會試試這個。 – user290870 2010-04-01 19:05:45

+0

感謝此作品 – user290870 2010-04-01 20:43:00

0

我認爲更好的方法是使用無表模型。以Railscatsts screencast爲例。這很簡單。

+0

我確實想在表格中存儲其他表單域。只是不是具有登錄列表的這個特定字段。我必須爲此創建一個單獨的模型嗎? – user290870 2010-04-01 18:08:02

+0

爲什麼不呢?您的情況與此截屏中的情況相同。這是對新評論或發佈的建議。如果評論和發佈是您應用中的不同模型(他們是值得推薦的),您甚至可以與此模型具有多態關聯。有關詳細信息,請查找此類截屏。 – Voldy 2010-04-01 18:48:45

+0

嗨, 我想存儲我的表單上的所有字段,除了一個在數據庫中。在這裏爲一個領域創建一個獨立的模型看起來像是一個矯枉過正的事件,儘管這可能起作用。我認爲用getter和setter方法爲當前模型對象創建一個新的實例變量是一個更好的解決方案。謝謝 – user290870 2010-04-01 20:42:23

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(user) self.unpersisted_info.split(「,」)。each {| item | p item} end – seanb123 2010-04-01 21:09:52