如何在我的rhtml文件中需要另一个.rb文件?

时间:2013-04-19 02:14:07

标签: ruby erb

在我的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路径。

2 个答案:

答案 0 :(得分:2)

从错误中可以看出,当前路径为viewsapp/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')

如果你认为你只使用常数和相对路径,我认为说这条路是相对的是正确的。