Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 485
Trantor Liu Avatar asked May 11 '14 03:05

Trantor Liu


1 Answers

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.

like image 186
Adilbiy Kanzitdinov Avatar answered Oct 04 '22 02:10

Adilbiy Kanzitdinov