0

我正在制作一个 ruby​​ gem(具有标准目录结构,例如 lib/mygem)......在那个 gem 中,我有一个方法调用应该打开一个 css 文件(来自 gem 中的 lib/vendor/assets/css目录结构)。并将css输出到视图文件。mygem.rb 看起来像:

require "mygem/version"
 module MyGem
   class Engine < Rails::Engine #cause rails to add its directories to the load path when the gem is required.
   end
 def mygem_div_tag(div_id, options={})
     options = {:css_template=>"example1"}.merge(options)
    file_str = IO.read("../vendor/assets/css/"+options[:css_template]+".css")
    div_str = %Q{
   <style type="text/css">
  #{file_str}
  </style> }
 end

因此,在视图中,我会有以下内容:

<%= mygem_div_tag %>

我得到一个错误:没有这样的文件或目录 - ../vendor/assets/css/example1.css

如何输出“example1.css”文件中的 CSS?

4

2 回答 2

0

如果这是 Rails 应用程序的一部分,请尝试:

file_str = IO.read("#{Rails.root}/vendor/assets/css/"+options[:css_template]+".css")
于 2012-08-08T20:28:02.663 回答
0

to 的参数IO#read要么是绝对路径,要么是相对于进程工作目录的路径,而不是相对于当前文件的路径。当您的 gem 作为另一个应用程序的一部分运行时,您将不知道其中任何一个。

为了获取相对于当前文件的路径,您可以使用File#expand_path特殊__FILE__常量:

file_path = File.expand_path("../vendor/assets/css/"+options[:css_template]+".css", File.dirname(__FILE__))
file_str = IO.read(file_path)
于 2012-08-08T22:03:55.983 回答