如何使用插件的“lib”文件夹中的类?

时间:2015-07-23 08:57:34

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-plugins

我在Rails 4.2.3中创建了一个插件,它的“lib”文件夹中也有一些类:

binding name="BindingName" 
maxReceivedMessageSize="2097152" 
maxBufferSize="2097152" 
maxBufferPoolSize="2097152" 

接下来,我创建了应用程序并将该插件包含为gem:

lib/xxx/some_class.rb

不幸的是,在应用程序中看不到SomeClass。

我想知道从插件的“lib”文件夹中包含该类和其他类的最佳方法是什么。我知道在应用程序的application.rb文件中我可以添加:

gem 'myplugin', path: "/path/to/plugin/myplugin"

但我不喜欢我必须明确指定“lib”文件夹的完整路径。有没有更好的方法呢?

2 个答案:

答案 0 :(得分:1)

在这种情况下,它应该足够了:

require 'xxx/some_class'

在使用SomeClass的文件中。为了让您深入了解捆绑商将为您(以及Rails)做些什么,他们会requirelib/yourplugin.rb中的require 'xxx/some_class'文件,如果您在该文件中Parse.Cloud.define("get_parse4j_object", function(request,response){ // Parameters from client (iOS/Android app) //var requestedObjectId = request.params.objectId; // Calling beckend service for getting user information Parse.Cloud.httpRequest({ method: "GET", headers: { 'Content-Type': 'application/json' }, url: "https://api.parse.com/1/parse4j/MLiOgxncUM", /* This could be your url for the proper php module */ //body: { "objectId":requestedObjectId }, /* Here you compose the body request for the http call, passing the php parameters and their values */ success: function(httpResponse) { /* We expect that the php response is a Json string, using the header('application/json'), so: */ var jsonResponse = JSON.parse(httpResponse.text); /* sample structure in jsonResponse: { "name":"Joe", "surname":"Banana", "birth_date":"01-02-1999" } */ /* Do any additional stuff you need... */ /* return the result to your iOS/Android client */ return response.success( { "myRequestedUserInfo" : jsonResponse } ); alert(jsonResponse); }, error: function(httpResponse) { return response.error({ "msg":"Unable to fetch this user", "code":123456 }); // sample error response } }); }); ,它将是“自动加载“在rails中,否则你只需要在你需要的文件中需要它。

答案 1 :(得分:0)

这应该是开箱即用的。看看ActiveRecord's lib/ tree,那里也是一个子目录。

我猜你没有指定Rails'自动加载设置子目录。

示例:即使ActiveRecord附带了一个类Base,该类也不会在没有命名空间的情况下可见。这就是您在模型中使用ActiveRecord::Base的原因。

如果您的插件将类放在lib/my_plugin/some_class.rb下,则Rails会在您指定MyPlugin::SomeClass而不仅仅是SomeClass时找到该类。