标签: rails-api

如何为特定控制器禁用ActiveModel :: Serializers?

我们在Rails应用程序中使用active_model_serializers - 0.8.1.

该应用程序有一些API特定的控制器继承自ActionController :: Metal,其方式类似于rails-apiActionController :: API.

好吧,我们只想将ActiveModel :: Serializers用于上面提到的API控制器.
这可能吗,怎么样?

注意:
文档中所述,通过替换可以明确避免使用序列化程序

render :json

有:

render :json => @your_object.to_json

我们正在寻求比上述解决方案更优雅的解决方案.
谢谢.

ruby ruby-on-rails rails-api active-model-serializers

9
推荐指数
4
解决办法
5365
查看次数

如何获取异常以呈现Rails开发错误页面的纯文本版本?

我正在使用rails-api构建一个没有Web界面的API.当我在开发中遇到错误时,我很乐意在没有所有HTML包装的情况下看到错误消息和纯文本堆栈跟踪.如何覆盖全局异常处理,以便在纯文本/ JSON中以开发模式呈现堆栈跟踪,并在生产中呈现一般错误消息?

ruby ruby-on-rails rails-api

8
推荐指数
1
解决办法
1847
查看次数

如何为活动模型序列化程序关系选择所需的属性

我使用JSONAPI格式Active Model Serializers来创建带有rails-api的api.

我有一个序列化程序,它显示了一个特定的post,有很多topics,目前,在关系下,列出这些主题.它目前只列出id和类型.我也想展示这个主题的标题.

有些人会说include: 'topics'在我的控制器中使用,但我不需要完整的主题记录,只需要它的标题.

问题:如何指定要从主题中显示哪些属性?

是)我有的

"data": {
  "id": "26",
  "type": "posts",
  "attributes": {
    "title": "Test Title 11"
  },
  "relationships": {
    "topics": {
      "data": [
        {
          "id": "1",
          "type": "topics"
        }
      ]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我想要的是

"data": {
  "id": "26",
  "type": "posts",
  "attributes": {
    "title": "Test Title 11"
  },
  "relationships": {
    "topics": {
      "data": [
        {
          "id": "1",
          "type": "topics",
          "title": "Topic Title"
        }
      ] …
Run Code Online (Sandbox Code Playgroud)

json ruby-on-rails rails-api active-model-serializers

8
推荐指数
1
解决办法
1798
查看次数

具有多个模型和auth标头的devise_token_auth

这是我的问题,我为User模型覆盖了控制器:

mount_devise_token_auth_for 'User', at: 'auth', controllers: {
     registrations:      'v1/authentication/registrations'
     sessions:           'v1/authentication/sessions'
     token_validations:  'v1/authentication/token_validations'
 }
Run Code Online (Sandbox Code Playgroud)

这样工作正常,没有问题。但是,当我使用相同的控制器添加新模型时:

mount_devise_token_auth_for 'Admin', 'admin_auth', controllers: {
   sessions:           'v1/authentication/sessions',
   token_validations:  'v1/authentication/token_validations'
}
mount_devise_token_auth_for 'User', at: 'auth', controllers: {
   registrations:      'v1/authentication/registrations',
   sessions:           'v1/authentication/sessions',
   token_validations:  'v1/authentication/token_validations'
}
Run Code Online (Sandbox Code Playgroud)

他们的Admin模型的响应标头没有auth键。响应是ok(200),但不返回auth标头。但是,如果删除Admin模型的控制器部分(替代),则响应将返回auth密钥。顺便说一句,重写仅更改控制器的渲染方法。有什么可以帮助找到解决此问题的方法吗?

ruby-on-rails access-token rails-api devise-token-auth

8
推荐指数
1
解决办法
530
查看次数

如何在rails 5中拯救ActionDispatch :: ParamsParser :: ParseError并返回自定义API错误?

每当针对我的仅使用API​​的Rails 5.x应用程序发送格式错误的JSON时,我都会收到异常,并且Rails将整个堆栈跟踪作为JSON返回.显然,我想回答一个很好的,自定义的,格式化的错误.

=> Booting Puma
=> Rails 5.0.0.1 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.6.0 (ruby 2.3.0-p0), codename: Sleepy Sunday Serenity
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://localhost:3000
Use Ctrl-C to stop
Started POST "/api/v1/identities/" for ::1 at 2016-10-26 18:42:32 +0200
  ActiveRecord::SchemaMigration Load (0.3ms)  SELECT "schema_migrations".* FROM "schema_migrations"
Error occurred while parsing request parameters.
Contents:

{
    "whatever": …
Run Code Online (Sandbox Code Playgroud)

api ruby-on-rails rack-middleware rails-api ruby-on-rails-5

8
推荐指数
2
解决办法
4514
查看次数

Rails Webpacker或Vue-CLI?

我正在构建单页(Web)应用程序.我对Rails v5.0非常感兴趣,特别是它的内置API功能.

在过去,我已经构建了JavaScript前端Vue.js,通常使用提供的模板Vue-CLI project.这允许Vue component-based基本上在任何地方部署静态站点.这很棒.

现在,Rails 5.1有一些内置的Webpack和Yarn功能看起来非常引人注目.我不知道如何继续我的新申请.

我的问题:

  • 使用Rails v5.1中提供的Webpacker扩展,将Webpack和Vue集成到Rails中的优缺点是什么?我打算部署到Heroku.
  • 另一方面,在后端使用Rails API-only模式的优缺点是什么,并将基于Vue/Webpack的前端保存在自己的目录中?我将所有内容保存在同一个存储库中,通过Heroku部署后端,并通过像Netlify这样的静态主机部署前端.
  • 哪种方法会有更多的认知开销或技术复杂性?

在过去的几天里,我一直在四处寻找,而且我没有在网上找到关于此的简明信息.人们似乎对Rails开发环境的自动重新加载功能感兴趣,但我已经使用Vue-CLI免费获得了这些功能.

据我所知,这些是将它们分开的原因:

  • 在任何地方部署前端都非常简单.
  • Rails的Webpacker模式非常新,目前还没有很多教程或指南,特别是关于集成测试.将事物分开意味着我现有的测试设备仍应适用.

以下是将两个部分集成在一起的一些优点:

  • 如果有必要,可以在前端使用静态资产,也可以在将来使用服务器生成的页面.
  • 购买"Rails方式",Rails团队隐含的未来维护.
  • JS Frontend不需要单独托管.
  • 不需要担心CORS(?)

这两种方法还有哪些具体的好处?

ruby-on-rails single-page-application rails-api webpack vue.js

8
推荐指数
1
解决办法
982
查看次数

rails active_storage:install IS NOT WORKING

我已将rails api应用程序从5.1更新到5.2.我只使用rails api.我正在尝试使用活动存储.我认为问题是由于线路config.api_only = true输入config/application.rb.

我做了很多谷歌,但没有找到任何东西如何在rails api中使用主动存储.

这是我的Gemfile:

source 'https://rubygems.org'

ruby '2.5.1'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end

gem 'rails', '~> 5.2.0'
gem 'pg', '>= 0.18', '< 2.0'
gem 'puma', '~> 3.7'
gem 'rack-cors'

# Auth
gem 'bcrypt'
gem 'jwt'

#Media file upload
gem 'activestorage'

# gem 'devise', '4.4.3'
# gem 'devise-jwt', '~> 0.5.6'
gem 'active_model_serializers', '~> 0.10.0', require: true

# backgroud jobs
gem 'sidekiq'

# fast boot
gem 'bootsnap', …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails rails-api rails-activestorage

8
推荐指数
2
解决办法
2632
查看次数

Jbuilder没有使用gem rails-api

我正在尝试使用jbuilder的rails-api gem,而我似乎无法使其工作

这是我的rails-api控制器/ jbuilder视图的示例

的Gemfile

gem 'jbuilder'
Run Code Online (Sandbox Code Playgroud)

控制器app/controller/users_controller.rb

 def show
  @user = User.find_by(id: params[:id])
 end
Run Code Online (Sandbox Code Playgroud)

查看app/views/users/show.json.builder

json.content format_content(@user.id)
Run Code Online (Sandbox Code Playgroud)

根据Jbuilder文档,这应该可以正常工作,但仍然没有返回任何内容.

谢谢您的帮助!

jbuilder rails-api ruby-on-rails-4

7
推荐指数
1
解决办法
2535
查看次数

使用OAuth密码凭据授予令牌访问身份验证的优点

我正在使用Rails 5为移动应用程序创建API.目前,我不需要三脚授权,因为API只会由我们自己的移动应用程序使用.

我正在考虑选择以下两个选项之一:

  1. 门卫+设计:我可以使用门卫实现OAuth 2.0,但至少目前我只会使用密码凭据授权.
  2. Rails自己的ActionController::HttpAuthentication::Token模块+设计:这似乎是更简单的方法.

老实说,我看不到令牌访问身份验证方法和OAuth 2.0的密码凭据授权之间的区别.

如何选择一个而不是另一个?还有其他需要考虑的选择吗?

authentication ruby-on-rails oauth oauth-2.0 rails-api

7
推荐指数
1
解决办法
338
查看次数

如何从 fetch 请求中的 readableStream 响应中获取可下载文件

我有一个 React 应用程序,它向我的 Rails API 发送 POST 请求。我希望我的 API 端点生成一个 csv 文件,然后将该文件发送回 React 应用程序。我希望浏览器为最终用户下载 csv 文件。

这是端点的样子:

  def generate
      // next line builds the csv in tmp directory
      period_recap_csv = period_recap.build_csv
       // next line is supposed to send back the csv as response
      send_file Rails.root.join(period_recap.filepath), filename: period_recap.filename, type: 'text/csv'
    end
Run Code Online (Sandbox Code Playgroud)

在前端,我的请求如下所示:

export function generateCsvRequest(startDate, endDate) {
  fetch("http://localhost:3000/billing/finance-recaps/generate", {
    method: "post",
    headers: {
      Authorisation: `Token token=${authToken}`,
      'Accept': 'text/csv',
      'Content-Type': 'application/json',
      'X-Key-Inflection': 'camel',
    },
    //make sure to serialize your JSON body
    body: …
Run Code Online (Sandbox Code Playgroud)

csv download stream rails-api reactjs

7
推荐指数
2
解决办法
3707
查看次数