4

Rails3.0.5とRuby1.9.3では、宣言around_saveとインラインでコールバックの本体を定義することは可能ですか?around_save

つまり、このケースが適切に機能することに気づきました。

around_save :around_save_body
def around_save_body
  puts 'before save'
  yield 
  puts 'after save'
end

[114] pry(main)> a = Activity.find(57)
=> #<Activity id: 57, ... >

[115] pry(main)> a.save
before save
after save
=> true

一方、本文をインラインにすると、LocalJumpErrorが発生します。

around_save do |activity|
  puts 'before save'
  yield 
  puts 'after save'
end

[117] pry(main)> a = Activity.find(57)
=> #<Activity id: 57, ... >

[118] pry(main)> a.save
before save
LocalJumpError: no block given (yield)
from /home/maksim/hkn/website/app/models/activity.rb:47:in `block in <class:Activity>'

2番目の例でに変更yieldしてみyield activityましたが、同じ結果が得られました。私のaround_save体をaround_save宣言と一致させることは可能ですか?

4

1 に答える 1

11

この場合、2番目の引数としてaActiveRecordを渡します。これを行うだけです。Proc

around_save do |activity, block|
  puts 'before save'
  block.call
  puts 'after save'
end
于 2012-07-12T00:26:14.803 に答える