无法从控制器中的 ApplicationHelper 模块调用方法

Failing to call method from ApplicationHelper module in controller

我很难在我的一个控制器中调用方法。 当我试图让我的控制器保持苗条时,我想将一些代码移动到另一个地方。我选择了 ApplicationHelper,因为代码显然不属于我的模型之一。

这是我的 ApplicationHelper:

module ApplicationHelper
  def add_tag_to_vocab(vocab, tag)
    user = User.find(vocab.user_id)
    tag_handler = user.tags.where(name: tag).first  
    if tag_handler.nil? 
      tag_handler = user.tags.create(name: tag, active: true)
      vocab.tags << tag_handler
    else
      vocab.tags << tag_handler
    end
  end
end

现在我想在控制器中使用这个方法。我这样尝试:

def import_vocabs
  ....
  add_tag_to_vocab(new_vocab, @wordsearch.keyword)
  ...
  ...
  respond_to do |format|
    format.js { render file: "wordsearches/wordsearch_finish.js.erb"}
  end
end

我明白了:

NoMethodError (undefined method `add_tag_to_vocab' for #<WordsearchesController:0x007f86d18cec40>):

我的问题是: 我如何从 ApplicationHelper 调用此方法,它不应该自动可用吗? 我试图在 Rails Guides Controller Page 中找到答案,但我没有。

取决于答案: 如果 ApplicationHelper 不是正确的地方,我应该把这样的方法放在哪里?

您必须将模块包含在控制器中 class 从您尝试使用它的地方:

include ApplicationHelper

所以,它应该是这样的:

class YourClassName
  include ApplicationHelper

  def import_vocabs
    add_tag_to_vocab(new_vocab, @wordsearch.keyword)
    respond_to do |format|
      format.js { render file: "wordsearches/wordsearch_finish.js.erb"}
    end
  end
end