如何在我的新插件中使用Haml?

时间:2010-06-07 10:40:45

标签: ruby-on-rails rubygems ruby-on-rails-plugins haml

我正在为一个jruby on rails应用程序创建一个新的插件,最终将变成一个gem。在我的插件中,我有控制器,帮助器和视图。对于我的观点,我想使用Haml。问题是我似乎无法认识到它们是haml模板。甚至可以这样做吗?有没有办法让插件让Haml作为其视图的依赖?我的意思是,我打算为我创建的插件创建一个由插件创建的视图,可以由应用程序开发人员使用。

例如:

vendor/   
  plugins/    
    my_plugin/  
      lib/  
        app/  
          views/  
            my_plugin_demo/  
              index.haml.html
           controllers/  
             my_plugin_demo_controller.rb
           helpers/

在我的插件的init.rb中,我尝试了:

require 'my_plugin'  
require 'haml'  #doesn't seem to make a difference :(

但这似乎没有任何区别。有没有人有这方面的经验?我似乎无法找到有关如何使这项工作的任何文件。插件视图是否仅限于.erb模板?

更新:@Jens Fahnenbruck

我仍然有点困惑......你是否建议我将以下内容放入my_plugin的init.rb文件中?

# Load Haml and Sass.  
# Haml may be undefined if we're running gems:install.  
Haml.init_rails(binding) if defined?(Haml)  

require 'my_plugin'  

我试过这样做而且没用。它仍然给我以下页面错误:

Missing template my_plugin_demo/index.erb in view path app/views  

不确定我明白你推荐的内容......

1 个答案:

答案 0 :(得分:1)

这是由vendor/plugins/haml/init.rb创建的haml --rails /path/to/app文件(请参阅http://wiki.rubyonrails.org/howtos/templates/haml

begin
  require File.join(File.dirname(__FILE__), 'lib', 'haml') # From here
rescue LoadError
  begin
    require 'haml' # From gem
  rescue LoadError => e
    # gems:install may be run to install Haml with the skeleton plugin
    # but not the gem itself installed.
    # Don't die if this is the case.
    raise e unless defined?(Rake) &&
      (Rake.application.top_level_tasks.include?('gems') ||
        Rake.application.top_level_tasks.include?('gems:install'))
  end
end

# Load Haml and Sass.
# Haml may be undefined if we're running gems:install.
Haml.init_rails(binding) if defined?(Haml)

我相信最后一行是插件工作所需的内容

<强>更新

您的init.rb文件应如下所示:

require 'haml'
Haml.init_rails(binding)
require 'my_plugin'

更新2

尝试其他文件夹结构:

vendor/   
  plugins/    
    my_plugin/  
      lib/  
      app/  <-- one level up
        views/  
          my_plugin_demo/  
            index.haml.html
         controllers/  
           my_plugin_demo_controller.rb
         helpers/