Tra*_*Liu 13 controller ruby-on-rails initializer
我正在使用预测宝石.我将推荐人初始化为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")
Run Code Online (Sandbox Code Playgroud)
然后我想在CourseController中使用推荐器,如下所示:
class CourseController < ApplicationController
def show
# I would like to access the recommender here.
similiar_courses = recommender.similarities_for("course-1")
end
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能设置recommender为应用程序控制器变量,以便在控制器中访问它?
小智 41
在您的作品中,initilizers/predictor.rb您应将推荐人定义为:
recommender = CourseRecommender.new
Run Code Online (Sandbox Code Playgroud)
但是:
:: Recommender = CourseRecommender.new
这样,您可以在应用程序的整个范围内定义常量,而不是定义局部变量.在初始化程序和控制器中,您可以访问它Recommender.
我解决了这个问题。但我没有设置全局实例,而是使用单例模式。
这是代码:
# lib/course_recommender.rb
require 'singleton'
class CourseRecommender
include Predictor::Base
include Singleton
# ...
end
# initializers/predictor.rb
@recommender = CourseRecommender.instance
# 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")
# controllers/course_controller.rb
require 'course_recommender'
class CourseController < ApplicationController
def show
similiar_courses = CourseRecommender.instance.similarities_for("course-1")
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9373 次 |
| 最近记录: |