2013-03-10 39 views
-1

能有一个人在本指南中说明16回调类http://guides.rubyonrails.org/active_record_validations_callbacks.html什么是回调类中的ActiveRecord :: Base的Rails中

+0

他们已经该指南中描述的非常好。你有一个具体的问题或者你正在努力工作吗? – 2013-03-10 07:42:24

+0

我不明白为什么after_destroy PictureFileCallbacks.new会调用PictureFileCallbacks类中的after_destroy类的实例方法 – Amrut 2013-03-10 07:50:46

+0

嗯,它也解释了:“请注意,我们需要实例化一个新的PictureFileCallbacks对象,因为我们将回调声明为实例方法。如果回调函数使用实例化对象的状态,则特别有用,但通常将回调声明为类方法会更有意义:“ – vdaubry 2013-03-10 07:53:35

回答

1

好吧,我想我明白你的问题:

在PictureFileCallbacks的after_destroy方法会自动通过导轨神奇地调用:

当rails破坏你的PictureFile对象时,它将实例化一个PictureFileCallbacks对象并尝试在其中运行一个after_destroy方法。

一切按常规工作,如果你按照命名正确的话,所有东西都可以直接使用。

在一个虚拟项目上尝试一下,如果你在制作这个工作时遇到了一些麻烦,可以返回一些代码来显示。

0

一切工作按照惯例,你可以试试下面的例子:

#generate PictrueFile model with name attribute and generate seed 
rails g model PictureFile name:string 
#seeds.rb 
3.times do |i| 
    PictureFile.create(name: "name#{i}") 
end 

#create picture_file.rb and picture_file_callbacks.rb in model directory 
#picture_file_callbacks.rb 
class PictureFileCallbacks 
    def after_destroy(picture_file) 
    PictureFile.create(name: "demo") 
    end 
end 

#picture_file_callbacks.rb 
class PictureFile < ApplicationRecord 
    after_destroy PictureFileCallbacks.new 
end 

execute the command in rails c 
PictureFile.first.destroy 
PictrueFile.pluck(:name) #=>["name1", "name2", "demo"] 
相关问题