1

在我的 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?我不想使用绝对路径。

4

2 回答 2

2

从错误中可以看出,当前路径为views( app/views)。如果您想要的文件在您的应用程序lib目录中,您可以执行以下操作:

<% require_relative '../../lib/another' %>

你不需要.rb

不过,这是一个相当糟糕的主意。你不应该要求内部观点的东西。如果您尝试访问某种与视图相关的功能,您可以在控制器中要求它;视图可以访问所有控制器操作。走这条路,最好将功能包装在控制器方法中。

您还可以将功能放入助手中;这就是助手的用途。请参阅app/helpers/application_helper.rb一个好的起点,或针对视图制定一个特定的起点。请参阅查看帮助程序文档

于 2013-04-19T02:59:19.650 回答
0

一个很不健康的方法是加'.'。到加载路径

$LOAD_PATH << '.'

那么你可以使用

<% require './another.rb' %>

我认为最常见的方式是

require File.join(File.dirname(__FILE__), 'path', 'to', '..', 'file')

如果你认为你只使用一个常量和一个相对路径,我相信说这个路径是相对的是正确的。

于 2013-04-19T03:01:30.637 回答