我在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”文件夹的完整路径。有没有更好的方法呢?
答案 0 :(得分:1)
在这种情况下,它应该足够了:
require 'xxx/some_class'
在使用SomeClass
的文件中。为了让您深入了解捆绑商将为您(以及Rails)做些什么,他们会require
为lib/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
时找到该类。