Rails模型回调不起作用(创建另一个类的新实例)

时间:2013-10-03 13:35:44

标签: ruby-on-rails ruby ruby-on-rails-2

在我的circuit.rb课程中,我有以下内容

class Circuit < ActiveRecord::Base

  after_create :create_service

  def create_service
    # create service record
    service = Service.new :service_type => 'Circuit', :child_id => self.id, :organisation_id => self.organisation_id
  end

我只想在创建circuit时触发回调,我已经尝试了before_validation,日志中没有错误,事实上,没有提到{{1}表被触摸,我重新启动了服务器以及预防措施,但不确定为什么services实例没有被保存。

为了完整性:

service

此外,表中的所有列都允许class CircuitController < ApplicationController def update ... if request.post? if @circuit # update else # attempt create @circuit = Circuit.new params[:circuit] if @circuit.save redirect_to :action => 'update', :id => @circuit.id end end end end end ,但NULL列除外id,因此数据库端没有任何内容可以阻止记录被保存,类似地在模型中没有验证,AUTO_INCREMENT已正确保存。

1 个答案:

答案 0 :(得分:3)

您的回调可能正常启动。问题是您正在设置新的Service,但实际上并没有保存它。当控制器重定向时,Circuit对象将重新加载并丢失Service对象。

您可能想要实际创建对象:

service = Service.create :service_type => 'Circuit', :child_id => self.id, :organisation_id => self.organisation_id