在我的rhtml文件中,我想在同一目录中要求另一个ruby文件。所以我试过了:
<% require_relative 'another.rb' %>
但是我的日志中出现了这个错误:
(erb):2:in `require_relative': cannot infer basepath (LoadError)
然后我尝试使用:
<% require './another.rb' %>
它提出错误说:
/usr/local/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:45:in `require': cannot load such file -- ./views/another.rb (LoadError)
然后我试着看看做什么是基本路径:
puts File.absolute_path(__FILE__)
它返回:
(erb)
如何使用relative path
要求其他文件?我不想使用absoulute路径。
答案 0 :(得分:2)
从错误中可以看出,当前路径为views
(app/views
)。如果您想要的文件位于应用的lib
目录中,则可以执行以下操作:
<% require_relative '../../lib/another' %>
您不需要.rb
。
但这是一个相当糟糕的主意;你不应该从内部观点要求事物。如果您尝试访问某种与视图相关的功能,则可以在控制器中使用它;视图可以访问所有控制器操作。走这条路线,最好将功能包装在控制器方法中。
您还可以将功能放入帮助程序中;这是帮助者的目标。请参阅app/helpers/application_helper.rb
以获得良好的起点,或者为视图制作一个特定的起点。请参阅the view helper documentation。
答案 1 :(得分:0)
一种非常不健康的方式是添加'。'到负载路径
$LOAD_PATH << '.'
然后你可以使用
<% require './another.rb' %>
我认为最常见的方式是
require File.join(File.dirname(__FILE__), 'path', 'to', '..', 'file')
如果你认为你只使用常数和相对路径,我认为说这条路是相对的是正确的。