Tag: 葡萄

从父类inheritance类定义

我正在我的Rails模型中构建Grape Entities,如下所述: https://github.com/ruby-grape/grape-entity#entity-organization 目前,我正在根据模型本身的列哈希自动创建默认值。 所以我有一个静态的get_entity方法,它暴露了所有模型的列: class ApplicationRecord < ActiveRecord::Base def self.get_entity(target) self.columns_hash.each do |name, column| target.expose name, documentation: { desc: "Col #{name} of #{self.to_s}" } end end end 然后我在这里有一个示例Book模型在声明的Entity子类中使用它(注释还显示了我如何覆盖模型列之一的文档): class Book < ActiveRecord::Base class Entity < Grape::Entity Book::get_entity(self) # expose :some_column, documentation: {desc: "this is an override"} end end 这种方法的缺点是我总是需要在我想要实体的每个模型中复制和粘贴类Entity声明。 任何人都可以帮我自动为ApplicationRecord的所有子项生成类Entity吗? 然后,如果我需要覆盖,我将需要在类中具有Entity声明,否则如果默认声明足够并且可以保持原样。 注意: 我不能直接在ApplicationRecord中添加类Entity定义,因为Entity类应该调用get_entity,get_entity依赖于Books的column_hash。 解: […]

测试rails葡萄API与curl,params数组

我使用curl手动测试我的rails应用程序葡萄API。 我想发送一个[1,2,3]数组作为请求查询参数,以便可访问,如: p params[:tickets_ids] => [1,2,3] 我只发现了如何发送被解释为哈希的东西的线索。 我将非常感谢如何使用curl发布数组。

葡萄error handling策略?

我正在使用Grape和Rails创建REST API。 我有基本的架构,我正在寻找“清理”的地方。 其中一个地方是error handling/处理。 我目前正在整个API的root.rb(GRAPE :: API基类)文件中解决错误。 我格式化它们然后通过rack_response发回错误。 一切正常,但是root.rb文件变得有点臃肿,所有的错误都被拯救了,其中一些有特殊的解析需要完成。 我想知道是否有人为error handling制定了一个好的策略,以便它可以移动到它自己的模块中并使root.rb(GRAPE :: API基类)相当精简。 我真的想创建一个error handling模块并为每种类型的错误定义方法,例如…… 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 然后在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 […]

使用Grape和Devise进行用户身份validation

我很难理解并在API中正确实现用户身份validation 。 换句话说,我很难理解Grape API与Backbone.js,AngularJS或Ember.js等前端框架的集成。 我试图调整所有不同的方法,并阅读了很多相关内容,但谷歌给我带来了真正糟糕的资源,在我看来,就像在这个主题上没有真正好的文章 – 使用Devise和前端的Rails和用户身份validation框架 。 我将描述我目前的支点,我希望你能就我的实施提供一些反馈,并指出我正确的方向。 目前的实施 我有跟随Gemfile的后端Rails REST API (我会故意缩短所有文件代码) gem ‘rails’, ‘4.1.6’ gem ‘mongoid’, ‘~> 4.0.0’ gem ‘devise’ gem ‘grape’ gem ‘rack-cors’, :require => ‘rack/cors’ 我当前的实现只有具有以下路由的API( routes.rb ): api_base /api API::Base GET /:version/posts(.:format) GET /:version/posts/:id(.:format) POST /:version/posts(.:format) DELETE /:version/posts/:id(.:format) POST /:version/users/authenticate(.:format) POST /:version/users/register(.:format) DELETE /:version/users/logout(.:format) 我创建了以下模型user.rb class User include Mongoid::Document […]

如何validation此哈希参数?

如何为此哈希参数编写正确的paramsvalidation: { “files”: { “main.c”: { “contents”: “#include …”, “foo”: “bar” }, “main.h”: { “contents”: “#define BLAH …”, “foo”: “baz” }, … more files here … } } files是我要validation的哈希参数。 files每个键都可以是任何东西(字符串); 值是具有特定格式的哈希值,也需要进行validation(需要contents和foo )。 我正在使用葡萄0.9.0。 这就是我想要的东西: params do optional :files, type: Hash do requires , type: Hash do requires :contents, type: String requires :foo, type: String end […]

为什么我用Rails和葡萄得到“无法自动加载”?

我想为Android应用做一个API。 搜索时,我找到了{grape} 。 我正在学习本教程 ,但是我在启动Rails服务器时遇到了问题: => Booting WEBrick => Rails 4.0.2 application starting in development on http://0.0.0.0:80 => Run `rails server -h` for more startup options => Ctrl-C to shutdown server Exiting C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/activesupport-4.0.2/lib/act ive_support/dependencies.rb:464:in `load_missing_constant’: Unable to autoload c onstant Usuarios, expected C:/Sites/appCerca/app/api/v1/usuarios.rb to define it (LoadError) 我的目录: app ..api ….api.rb ….v1 ……root.rb ……usuarios.rb 和文件: […]

如何在葡萄的一个区块中创建两条路线?

我想在一个动作块中捕获2个类似的路线。 在Rails5中我可以轻松地做到这一点。 我首先声明这个: get ‘:folder/:file’ => ‘get#index’, :file => /.*/, :folder => /.*/ get ‘:file’ => ‘get#index’, :file => /.*/ 这允许我捕获:folder和:folder一样多,可以像a/b/c/d…和:file最后一个文件名。 第二个也允许我只捕获文件名。 两条路线都以同一行动为目标。 但是,在Grape中,因为它被声明为块而不是路由到方法定义,所以我必须写两次相同的块… 有没有办法在一个路由参数中同时捕获/as/many/folder/and/file.ext和/file.ext ? 我尝试了可选参数,要求。 他们都没有工作。 我使用的原因:folder/:file (两次regexp)是我可以抓取:folder参数和:file参数分开而不手动拆分它们。 get ‘:folder/:file’, requirements: { file: /.*/, folder: /.*/ } do # params[:folder] and params[:file] end get ‘:file’, requirements: { file: /.*/ } do # params[:file]. […]

为什么尝试使用Grape with Rails失败了“未初始化的常量API”?

我希望有人解释为什么在Rails(4.1.8)和Grape(0.10.1)中发生这种情况 所以这是我的API: app/api/root.rb : module API class Root < Grape::API prefix 'api' mount API::V1::Root end end app/api/v1/root.rb : module API::V1 class Root < Grape::API version 'v1' mount API::V1::Users end end app/api/v1/users.rb : module API::V1 class Users < Grape::API format 'json' resource :users do desc "Return list of users" get '/' do User.all end end end […]