0

在我的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,日志中没有错误,事实上,没有提到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因此数据库端没有任何内容会阻止保存记录,同样,模型中没有验证并且circuit正确保存。

4

1 回答 1

3

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

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

service = Service.create :service_type => 'Circuit', :child_id => self.id, :organisation_id => self.organisation_id
于 2013-10-03T13:39:07.257 回答