copy-edits 68abbac [ci skip]
* Rewording to avoid "you"s. * Suggest as first natural alternative to refactor the block to evaluate to the returned value. * Removes the quotes around "filters", since that is a common work in our jargon.
This commit is contained in:
parent
b34352e425
commit
6814c78b67
@ -95,24 +95,34 @@ gem to your Gemfile.
|
|||||||
|
|
||||||
### Usage of `return` within inline callback blocks
|
### Usage of `return` within inline callback blocks
|
||||||
|
|
||||||
Previously, Rails allowed you to `return` from an inline callback block:
|
Previously, Rails allowed inline callback blocks to use `return` this way:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
class ReadOnlyModel < ActiveRecord::Base
|
class ReadOnlyModel < ActiveRecord::Base
|
||||||
before_save { return false }
|
before_save { return false } # BAD
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
This behaviour was never intentionally supported. Due to a change in the internals
|
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
|
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
|
`return` statement in an inline callback block causes a `LocalJumpError` to
|
||||||
be raised when the callback is executed. If you need to use `return` statements
|
be raised when the callback is executed.
|
||||||
in your callbacks, it is recommended that you explicitly define them as methods
|
|
||||||
and pass the method name as a symbol instead:
|
Inline callback blocks using `return` can be refactored to evaluate to the
|
||||||
|
returned value:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
class ReadOnlyModel < ActiveRecord::Base
|
class ReadOnlyModel < ActiveRecord::Base
|
||||||
before_save :before_save_callback
|
before_save { false } # GOOD
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternatively, if `return` is preferred it is recommended to explicitly define
|
||||||
|
a method:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
class ReadOnlyModel < ActiveRecord::Base
|
||||||
|
before_save :before_save_callback # GOOD
|
||||||
|
|
||||||
private
|
private
|
||||||
def before_save_callback
|
def before_save_callback
|
||||||
@ -122,9 +132,11 @@ end
|
|||||||
```
|
```
|
||||||
|
|
||||||
This change applies to most places in Rails where callbacks are used, including
|
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
|
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)
|
Controller (e.g. `before_action`).
|
||||||
for more details.
|
|
||||||
|
See [this pull request](https://github.com/rails/rails/pull/13271) for more
|
||||||
|
details.
|
||||||
|
|
||||||
### Methods defined in Active Record fixtures
|
### Methods defined in Active Record fixtures
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user