rails after_save observer的参数

时间:2010-04-01 17:50:06

标签: ruby-on-rails activerecord observer-pattern

我希望用户在表单上输入以逗号分隔的登录列表,以便在创建新评论/帖子时通过电子邮件通知。我不想将此列表存储在数据库中,因此我将使用form_tag_helper'text_area_tag'而不是表单助手text_field。我有一个'after_save'观察者,它应该在创建评论/帖子时发送电子邮件。据我所知,after_save事件只将模型对象作为参数,因此如何将此非模型支持的登录列表传递给观察者,以传递给在cc列表中使用它们的Mailer方法。

感谢

3 个答案:

答案 0 :(得分:4)

您希望将列表存储在virtual attribute中。它将在after_save回调中提供。

答案 1 :(得分:0)

我认为更好的方法是使用无表格模型。查看Railscatsts screencast的示例。这很简单。

答案 2 :(得分: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%>