我正在使用Grape和Rails来创建REST API.我有基本的架构,我正在寻找"清理"的地方.其中一个地方是错误处理/处理.
我目前正在整个API的root.rb(GRAPE :: API基类)文件中解决错误.我格式化它们然后通过rack_response发回错误.一切正常,但是root.rb文件变得有点臃肿,所有的错误都被拯救了,其中一些有特殊的解析需要完成.我想知道是否有人为错误处理制定了一个好的策略,以便它可以移动到它自己的模块中并使root.rb(GRAPE :: API基类)相当精简.
我真的想创建一个错误处理模块并为每种类型的错误定义方法,例如......
module API
module ErrorHandler
def record_not_found
rack_response API::Utils::ApiErrors.new({type: e.class.name, message: 'Record not found'}).to_json, 404
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后在root.rb文件中执行类似的操作
module API
class Root < Grape::API
prefix 'api'
format :json
helpers API::ErrorHandler
rescue_from ActiveRecord::RecordNotFound, with: :record_not_found # Use the helper method as the handler for this error
end
end
Run Code Online (Sandbox Code Playgroud)
有没有人做过这样的事情?我一直在尝试上述策略的各种风格,但我似乎无法做任何事情.
我有一个家庭作业,要求将十进制数转换为指定的数字位数.更明显的是,这个bash脚本将采用两个输入参数,第一个是将执行移位的数字(最多9位),第二个是要移位的数字的数字(-9到9).另一个要求是,当一个数字从末端移开时,它应该连接到数字的另一端.需求的一个令人头痛的问题是我们不能使用任何类型的控制语句:没有循环,没有if和switch case.
示例:12345 3应该是345000012而12345 -3应该是12345000
我知道如果我修改12345乘10 ^ 3我得到345然后如果我将12345除以10 ^ 3我得到12然后我可以将这两个变量连接起来得到34512.我不太确定这是不是确切正确,但这是我现在最接近的.至于-3班次,我知道10 ^ -3是.001并且会工作但是当我尝试在bash中使用10 ^ -3时我得到一个错误.
我只是迷失在这一点,任何提示将不胜感激.
编辑:经过几个小时的抨击(双关语)我的头脑反对这个问题,我终于想出了一个大部分工作的脚本.我现在会发布这些代码,但我担心另一名绝望的失败者可能偶然发现它.我会在一两周内检查并发布我想出的内容.我能够用mods和division做到这一点.谢谢大家的回复,这真的帮助我从不同角度打开并思考问题.
我在Java的嵌入式环境中使用OrientDB.我正在我的应用程序中创建数据库和类并插入数据.当我通过控制台查看数据时,我可以看到数据库中的类,以及类中正确的行数.但是,当我尝试通过此命令浏览类中的数据时browse class testData,我收到以下错误
Error: com.orientechnologies.orient.core.exception.OSerializationException: Found invalid % character. Ensure it is opened and closed correctly.
我已经搜索了我的源数据,它不包含任何内容%.我知道OrientDB对间距特别敏感,特别是在字符周围,)但是我所拥有的数据并没有使用似乎有错误的字符.
有没有人遇到过这种错误?有关如何解决错误的任何想法?
用于创建数据库的代码
private void createNewOrientDatabase(){
String dbPath = "plocal:./db/test";
orientDatabase = new ODatabaseDocumentTx(dbPath).create();
}
Run Code Online (Sandbox Code Playgroud)
用于创建类的代码
public void createClasses(Table t){
if(orientDatabase.getMetadata().getSchema().getClass(t.getName()) == null) {
orientDatabase.getMetadata().getSchema().createClass(t.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
插入数据的代码
public void insertData(Table table, TableSource data){
for (String s : data){
ODocument document = new ODocument(table.getName());
String[] parts = s.split(",");
for(int i = 0; i < table.getColumns().size(); ++i){
document.field(table.getColumns().get(i).getName(),parts[i]);
} …Run Code Online (Sandbox Code Playgroud)