How to set in a middleware a variable accessible in all my application? How to set in a middleware a variable accessible in all my application? ruby ruby

How to set in a middleware a variable accessible in all my application?


You can use 'env' for that. So in your middleware you do this:

def call(env)  env['account'] = Account.find(1)  @app.call(env)end

You can get the value by using 'request' in your app:

request.env['account']

And please don't use global variables or class attributes as some people suggest here. That's a sure way to get yourself into troubles and really is a bad habit.


I don't know if this can be done with a Middelware. My suggestion would be this:

class ApplicationController < ActionController::Base  protect_from_forgery  before_filter :set_my_varprivate  def set_my_var    @account ||= Account.find(1)  endend

This way all your controllers and views have access to @account


You can have a cattr_accessor :my_var in any model and set this variable from middleware by

  MyModel.my_var = 'something'

And you can access this anywhere in the application.