2

我在 Rails 3.2 应用程序中使用rails-footnotes gem,但我似乎无法获得脚注来注册任何部分的存在:它总是显示零部分计数。

我认为,能够像这样轻松地知道视图上显示了多少和哪些部分非常有用,所以我真的很想让这个工作(其余工作很好),但我不确定是什么问题是并且我希望其他人也有同样的问题并且能够解决它。有没有我可能错过的设置?

我认为这无关紧要,但我使用的是 OSX 10.6.8,并且在让 gem 正确使用 Sublime Text 2 时遇到了一些问题,但它们确实得到了解决(详情见StackOverflow 答案)。

更新

似乎该问题仅存在于 haml 模板,因为我得到了 erb 模板的预期输出。似乎只有 erb 模板被计算/识别......?

更新 2

@DonHopkins 在下面的回答让我所有的 Haml 模板都可以在 Rails 脚注中注册。我把它放在我的配置文件中,如下所示:

配置/初始化程序/rails_footnotes.rb

if defined?(Footnotes) && Rails.env.development?
  Footnotes.run! # first of all
  Footnotes::Notes::LogNote::LoggingExtensions.module_eval do
    def add(*args, &block)
      super
      logged_message = args[2] + "\n"
      Footnotes::Notes::LogNote.log(logged_message)
      logged_message
    end
  end

  # ... other init code
  Footnotes::Filter.prefix = 'subl://open?url=file://%s&line=%d&column=%d'
end 
4

1 回答 1

5

我有一个类似的问题,虽然我使用的是 erb 模板,而不是 haml。我用猴子补丁将它固定到rails-footnotes。

查看 rails-footnotes 代码(版本 3.7.9),在我看来问题出在这种方法中:

module Footnotes
  module Notes
    class LogNote < AbstractNote
      ...
      module LoggingExtensions
        def add(*args, &block)
          logged_message = super
          Footnotes::Notes::LogNote.log(logged_message)
          logged_message
        end
      end
      ...
    end
  end
end

add方法假设super返回正在记录的消息,但在我的测试super中返回一个布尔值。为了解决这个问题,我创建了一个名为 footnotes_patch.rb 的文件,其中包含以下内容:

Footnotes::Notes::LogNote::LoggingExtensions.module_eval do
  def add(*args, &block)
    super
    logged_message = args[2] + "\n"
    Footnotes::Notes::LogNote.log(logged_message)
    logged_message
  end
end

如果您想尝试解决方案,请将该文件放在 config/initializers 中,然后重新启动您的应用程序。

于 2012-12-17T17:06:03.427 回答