Rails 3 Gemfile中的gem在Bundle Install后没有加载

4

我正在使用Ruby v2.0.0和Rails 3编写一个应用程序。

我在app/helpers/posts_helper.rb中有一个帮助器:

module PostsHelper
  def markdown(text)
    @redcarpet = Redcarpet::Markdown.new(Redcarpet::Render::HTML, {fenced_code_blocks: true}) unless @redcarpet
    @redcarpet.render text
  end
end

我的Gemfile包含gem 'redcarpet', '~> 2.2',我已经成功运行了bundle install。但是每当我尝试加载使用此辅助程序的页面时,就会出现此错误:

uninitialized constant PostsHelper::Redcarpet

我该怎么做才能让这个工作起来?我对这个问题感到困惑。

编辑:

我还在rails控制台中测试了Redcarpet:

$ bundle exec rails console
Loading development environment (Rails 3.2.13)
irb(main):001:0> Redcarpet::Markdown.new(Redcarpet::Render::HTML).render('text *markdownified*')
=> "<p>text <em>markdownified</em></p>\n"

所以它在控制台中可以工作,但在我的辅助函数中却不行(或者控制器,我也尝试过了)。

1个回答

2

Ruby正在尝试在PostsHelper命名空间中查找Redcarpet。使用::Redcarpet将其提升到全局命名空间。


我已将两个引用从Redcarpet更改为::Redcarpet,现在出现了这个错误:未初始化常量Redcarpet - Mike Holler
1
如果您在Rails控制台中执行@redcarpet = ...语句会发生什么?对我来说它是有效的。 - Bryan Ash
2
  1. 在安装redcarpet后,你是否重新启动了rails服务器?
  2. 尝试不使用实例变量,去掉@符号。
  3. 在helper中添加require,这应该是不必要的吗?
- house9
1
我简直不敢相信。我没有重启服务器。哇,谢谢你的绝妙常识! - Mike Holler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接