2017-08-08 63 views
0

今天我試圖用一個精彩的回調:after_commit當對象被寫入數據庫觸發,但是,我從Rails的得到的錯誤消息:在Rails 5的控制器中使用什麼而不是after_commit?

ActionController::RoutingError (undefined method `after_commit' for ImagesController:Class 
Did you mean? after_action): 

好了,真丟人!而且似乎這個回調已被棄用! 通過搜索,我試圖使用:after_create_commit,這給了我同樣的錯誤。

第三步是嘗試:after_action。這裏是問題: 如何使其工作方式與:after_commit?

我已經試過apidock.com - 它確實很小!我也試過api.rubyonrails.org - 這是說塊,但我不是一個紅寶石忍者來理解它。所以我真的很高興,如果你可以透露一些光!

ImagesController:

class ImagesController < ApplicationController 
    after_create_commit :take_image_to_album 

    def take_image_to_album 
    if check_album 
     add_inner_to_album(@image) 
    end 
    end 

    def create 
    @image = Image.create(image_params.merge(:user_id => current_user.id) 

    respond_to do |format| 
     unless @image.save 
     format.html { render :show, notice: "Error!" } 
     format.json { render json: @image.errors, status: :unprocessable_entity } 
     else 
     format.html 
     format.json { render :show, status: :ok, location: @image } 
     end 
    end 
    end 
    ... 

    def add_inner_to_album(image) 
    contents = @album.content 
    contents << [image.id, image[:imageup], false] 
    @album.update(:content => contents) 
    end 
    end 
+0

你的ImagesController上有什麼? –

+0

'after_commit'僅適用於型號。對於控制器,你的意思是'after_action'。控制器和模型共享一個通用的設計語言,但不一定是方法名稱。 – tadman

+0

@tadman您是否想將此回調和屬於它的方法移動到模型中? –

回答

6

after_commit方法僅適用於機型。在控制器系列中,您有after_action,將在控制器的操作完成後執行。

例如,在一個控制器的after_action是這樣的:響應所述請求之後執行

class UsersController < ApplicationController 
    after_action :log_activity, only: :show 

    # GET v3/users/:id 
    def show 
    render status: :ok, 
      json: { id: current_user.id, name: current_user.name } 
    end 

    def log_activity 
    current_user.update(last_activity_at: Time.current) 
    end 

end 

log_activity方法。

after_action :log_activity, only: :showonly中,您可以指定運行log_activity後哪些操作。如果你沒有指定任何,它會在控制器中定義的每個動作之後運行。

+0

您能解釋一下「show_serializer」方法的用途嗎? –

+0

對不起,'show_serializer'是Serializer類的一個實例,它只具有返回哈希的響應能力。我會改變它以簡化 – MatayoshiMariano

+0

非常感謝! –

相關問題