我想知道在 Volt 框架中包含 ruby 类的最佳方法是什么。我想使用Socket 类来查找站点访问者的 IP 地址。我想在控制器中使用它,但是把:
require 'socket'
在文件的顶部不起作用。有什么建议么?
好吧,我不认为你可以在客户端使用 Socket 类,因为 Volt 使用OpalRb在客户端运行 Ruby,不幸的是我不认为 Opal 可以支持 Socket 类,因为这很难做到浏览器。但是,您可以在服务器端运行代码并将所需的结果传递给客户端。您可以使用Volt 的任务来执行此操作。您可以像这样创建它们:
require 'socket'
class SocketTask < Volt::Task
def use_sockets
# do your thing with sockets here...
end
end
然后你可以在其他地方使用它们,例如,在这样的控制器中:
class Controller < Volt::ModelController
def some_action
SocketTask.use_sockets
# You can also use the #then method of the returned promise to get the result of the call.
# You can even use the #fail method on the promise to get any thrown errors.
# The following can also run code on the client.
SocketTask.use_sockets.then do |result|
alert result
end.fail do |error|
puts error
end
end
end
这里还有 Rick Carlino 关于 Volt 任务的精彩截屏视频。