diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-12-12 08:10:57 -0800 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2013-12-12 08:10:57 -0800 |
commit | a9b3c8f2b03fec61aeea976a1ddfa9eb41c8a2ba (patch) | |
tree | 5042e73d35028e8621355cd28936cc90d3cc1c9e | |
parent | 830044ee6f5fc7940ba06d7527c9fb09e046d6e3 (diff) | |
parent | 68abbac2fc6ef8808e1788be9c4f41581674d17f (diff) | |
download | rails-a9b3c8f2b03fec61aeea976a1ddfa9eb41c8a2ba.tar.gz rails-a9b3c8f2b03fec61aeea976a1ddfa9eb41c8a2ba.tar.bz2 rails-a9b3c8f2b03fec61aeea976a1ddfa9eb41c8a2ba.zip |
Merge pull request #13271 from chancancode/warn_about_using_return_in_as_callbacks
Warn about using `return` inside inline callback blocks [ci skip]
-rw-r--r-- | guides/source/upgrading_ruby_on_rails.md | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/guides/source/upgrading_ruby_on_rails.md b/guides/source/upgrading_ruby_on_rails.md index de06ab291f..9be48acb12 100644 --- a/guides/source/upgrading_ruby_on_rails.md +++ b/guides/source/upgrading_ruby_on_rails.md @@ -93,6 +93,39 @@ If you application depends on one of these features, you can get them back by adding the [`activesupport-json_encoder`](https://github.com/rails/activesupport-json_encoder) gem to your Gemfile. +### Usage of `return` within inline callback blocks + +Previously, Rails allowed you to `return` from an inline callback block: + +```ruby +class ReadOnlyModel < ActiveRecord::Base + before_save { return false } +end +``` + +This behaviour was never intentionally supported. Due to a change in the internals +of `ActiveSupport::Callbacks`, this is no longer allowed in Rails 4.1. Using a +`return` statement in an inline callback block will cause a `LocalJumpError` to +be raised when the callback is executed. If you need to use `return` statements +in your callbacks, it is recommended that you explicitly define them as methods +and pass the method name as a symbol instead: + +```ruby +class ReadOnlyModel < ActiveRecord::Base + before_save :before_save_callback + + private + def before_save_callback + return false + end +end +``` + +This change applies to most places in Rails where callbacks are used, including +Active Record and Active Model callbacks, as well as "filters" in Action +Controller (e.g. `before_action`). See [this pull request](https://github.com/rails/rails/pull/13271) +for more details. + ### Methods defined in Active Record fixtures Rails 4.1 evaluates each fixture's ERB in a separate context, so helper methods |