2013-03-21 47 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 

我希望幫助:)