在演示者对象中使用 gazay/gon

use gazay/gon in presenter object

我正在使用 Presenter 对象使一些复杂的数据可用于我的视图。我需要的部分数据打算由 javascript 呈现,为此我想使用 gon gem 将数据共享到浏览器。

这是我的(现在很简单),app/presenters/similarity_presenter.rb 对象:

class SimilarityPresenter
  attr_reader :similarities
  def initialize(similarities)
    @similarities = similarities
    gon.histories = @similarities.each { |s| [s.id, s.data(10)] }
  end
end

当我运行我的行动:

  def index
    period = Period.default
    @similarity_presenter = SimilarityPresenter.new Similarity.all
  end

我得到一个 undefined local variable or method 'gon',

我发现的第一种方法是将 gon 变量传递给演示者:

  def index
    period = Period.default
    @similarity_presenter = SimilarityPresenter.new gon, Similarity.all
  end

在演示者中:

class SimilarityPresenter
  attr_reader :similarities
  def initialize(gon, similarities)
    @similarities = similarities
    gon.histories = @similarities.each do |s|
      [s.id, s.data(10)]
    end
  end
end

这行得通,但我必须承认,我不太喜欢在使用演示者的每个控制器中传递变量。