Created
June 18, 2015 09:55
-
-
Save henrik/bb6732d5d4cddb5085a4 to your computer and use it in GitHub Desktop.
Fix "NoMethodError: undefined method `sweep'" error when downgrading from Rails 4 to Rails 3.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Without this fix, downgrading from Rails 4 to Rails 3 causes session cookies to blow up. | |
# | |
# The way the flash is stored in the session changed in a backwards-incompatible way. | |
if Rails::VERSION::MAJOR == 3 | |
module ActionDispatch | |
class Flash | |
def call(env) | |
if (session = env['rack.session']) && (flash = session['flash']) | |
# Beginning of change! | |
if flash.respond_to?(:sweep) | |
flash.sweep | |
else | |
session.delete("flash") | |
end | |
# End of change! | |
end | |
@app.call(env) | |
ensure | |
session = env['rack.session'] || {} | |
flash_hash = env[KEY] | |
if flash_hash | |
if !flash_hash.empty? || session.key?('flash') | |
session["flash"] = flash_hash | |
new_hash = flash_hash.dup | |
else | |
new_hash = flash_hash | |
end | |
env[KEY] = new_hash | |
end | |
if session.key?('flash') && session['flash'].empty? | |
session.delete('flash') | |
end | |
end | |
end | |
end | |
end |
Thanks for sharing this! This eases my concerns in possibly having to roll back from Rails 4 to Rails 3.
Thank you for sharing!
My application is on rails 3.2 from start and I am getting the same error but I have never done any upgrading from rails 3 to rails 4.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@victorarias came up with the idea for this fix.
Verified to work in dev; not yet in prod.