Search code examples
ruby-on-railscontrollerinitializer

Rails - How to set global instance variables in initializers?


I was using the predictor gem. I initialized the recommender in initializers/predictor.rb:

require 'course_recommender'    

recommender = CourseRecommender.new

# Add records to the recommender.
recommender.add_to_matrix!(:topics, "topic-1", "course-1")
recommender.add_to_matrix!(:topics, "topic-2", "course-1")
recommender.add_to_matrix!(:topics, "topic-1", "course-2")

And then I wanted to use the recommender in the CourseController like this:

class CourseController < ApplicationController
  def show
    # I would like to access the recommender here.
    similiar_courses = recommender.similarities_for("course-1")
  end
end

How could I set recommender as an application controller variable so I could access it in the controllers?


Solution

  • In your initilizers/predictor.rb you shall define your recommender not as:

    recommender = CourseRecommender.new
    

    but as:

    Recommender = CourseRecommender.new
    

    this way you define a constant throughout the scope of your application, instead of defining a local variable. In your initializer and controller you access it as Recommender.