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