2013-03-21 46 views
0

在我的控制器上创建操作,我使用sql查询来插入父记录和所有子记录。但它不会触发我需要的after_save回调。有触发这个干净的方式吗?我试着明确地调用@ record.save,但这会减慢表单的提交速度。由于干净的方式来触发after_save回调时,使用sql插入

编辑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 
+0

请发布相关型号和控制器代码。 – Brandan 2013-03-21 13:19:49

回答

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 

我希望帮助:)