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

时间:2015-08-31 09:31:50

标签: ruby-on-rails-4 controller helper

我正在努力在我的一个控制器中调用一个方法。 当我试图保持我的控制器瘦,我想将一些代码移动到另一个地方。我选择了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不是正确的地方,我会在哪里放这样的方法?

1 个答案:

答案 0 :(得分:1)

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

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