使用sql插入时,清除触发after_save回调的方法

时间:2013-03-21 13:16:26

标签: ruby-on-rails-3 controller

在我的控制器上的创建操作中,我使用sql查询来插入父记录和所有子记录。但它不会触发我需要的after_save回调。是否有一种干净的触发方式?我试着显式调用@ record.save,但这会减慢表单的提交速度。感谢

编辑1:添加相关的模型/控制器代码

模型

after_save { do_some_stuff }

控制器

def create
  insert_query = "SELECT fn_insert_order_all('#{param1}', '#{param2}', '#{param3}', #{param4});"
  new_record = ActiveRecord::Base.connection.execute(insert_query)

  respond_to do |format|
    if new_record[0]["fn_insert_order_all"] != false
      @record = Order.find_by_id((new_record[0]["fn_insert_order_all"]).to_i)
      # @record.save # I can trigger the after_save callback here, but it results in slower performance
      format.json { render json: @record, status: :created }
    else
      error = { message: "record not saved" }
      format.json { render json: error, status: :unprocessable_entity }
    end
  end
end

1 个答案:

答案 0 :(得分:0)

如果你调用after_create而不是after_save,请检查你的模型。

在模型中,对触发方法的调用应该类似于:

after_create :your_func

在带触发器的模型中,我的工作方式如下:

class Mymodel < ActiveRecord::Base
    {attributes}
    after_create :your_func
        private
            def your_func
                {do the stuff}
            end
end

我希望有帮助:)