问题标签 [active-model-serializers]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2298 浏览

ruby-on-rails - ActiveModel::Serializer 可以像 Rails 控制器那样具有命名空间名称(嵌套)吗?

问题:

我用我的控制器这样做:

为什么我不能用我的序列化器做到这一点?(或者我可以吗?)

语境:

我有多个控制器/路由对应于一个模型。

而且我需要每个模型有多个序列化器,它们与我的控制器一一对应。

ActiveModel::Serializers允许您从控制器指定序列化程序,如下所示:

那么为什么我也不能这样做呢?

我试图避免像这样的复合名称的丑陋,即使我知道它们会起作用:

  • ProductAlphaLicenseSerializer
  • ProductBravoLicenseSerializer
  • ProductCharlieLicenseSerializer

我的每个模型都支持多个 API,这就是我想要命名序列化程序的原因。每个对应的序列化程序以不同的方式使用每个模型。

0 投票
1 回答
1729 浏览

ruby-on-rails - 如何在我的控制器规范中获取 view_context 以测试活动模型序列化程序

我设置了这个 UserSerializer

这来自我的 ApplicationController

我在7:45 左右输入了基于此 railscast的“委托”代码

然后他继续说缺点是测试现在需要一个 view_context 并提供使用测试单元的解决方案。

当我运行我的规范时,我得到了两个错误之一

失败/错误:获取“show”,:id => user.id,:format => :json NoMethodError:#<#:0x00000004f69f60> 的未定义方法`current_client'

或者

失败/错误:data.active_model_serializer.new(data, {:root => name}).to_json RuntimeError: UserSerializer#current_client 委托给 scope.current_client,但范围为零:

如何在我的控制器规格中提供 view_context?

谢谢。

0 投票
2 回答
357 浏览

ruby-on-rails - 数组中不同类的active_model_serializers

FeedController 返回一个包含以下类对象的数组:Product、Kit 和 Article。

是否有可能以及如何使用 active_model_serializers 为 Product 应用 ProductSerializer、为 Kit 应用 KitSerializer 和为 Article 应用 ArticleSerializer?

这应该呈现如下内容:

0 投票
1 回答
1386 浏览

ruby-on-rails - Rails 中的 ActiveModel::Serializer - JSON 结果中忽略的序列化方法

我正在使用active_model_serializers为我的 Rails 模型创建 JSON。

串行器

但是,to_json 选项似乎忽略了 OptionSerializer 中添加的方法:

预期产出

实际输出

我已经查看了这篇 SO 帖子,但这是我能找到的唯一一篇遇到此问题的帖子。

我正在运行 Ruby 1.9.3 和 Rails 4.0.0。感谢您的时间。

任何支持、意见或建议将不胜感激。

0 投票
1 回答
869 浏览

ruby-on-rails - 使用 active-model-serializers 为 act-as-taggable 标记旁加载 JSON 时出错

在 Ruby 2/Rails 4 应用程序中,我尝试将 act-as-taggable-on 与 active_model_serializers 结合使用,以创建一个 JSON API,该 API 将输出我的标签以及其他模型参数。

首先是这个问题的一些背景/动机:JSON 被输入到 ember/ember-data 中,截至撰写本文时,它已经删除了对 JSON 中嵌入记录的支持。文档中有一个关于此的假设修复,但我发现它很笨拙,也没有真正让它工作。由于我是 Ember 新手,并且对 Rails 更熟悉一点,我想我会尝试用另一种方式解决这个问题,即在文档记录旁边加载标签记录。我更喜欢这个解决方案,因为它对我的应用程序更有意义,但我也无法让它工作。

下面是一个例子:假设我有一个使用acts-as-taggable-on的文档模型:

我已经用一个带有一个标签的文档设置了数据库。现在我们考虑以下情况:

1. 完整对象嵌入:使用以下序列化程序:

我的 JSON 具有以下格式(使用 Rails 4 UUID):

2. ID嵌入:使用序列化器

我的 JSON 现在看起来像:

3. ID Embed with Tags Sideloaded:根据active_model_serializers文档,我应该可以做到

但这不起作用。相反,我得到一个 NoMethodError:

我试过搜索这个问题,但到目前为止还没有发现任何有用的东西。我也找不到任何关于与其他 gem 一起使用的 gem 的文档。我现在怀疑它与acts-as-taggable-on 的实现方式有关,它不是一个简单的 has_many 关系?有人能就这个问题提供一些意见吗?提前致谢!

0 投票
0 回答
52 浏览

ruby-on-rails - ActiveModelSerializer 需要按正确顺序的函数

在 RoR 后端处理前端和 json 响应,我正在尝试设置序列化程序以避免代码混乱:only => []等等。

我发现,在具有关联的序列化程序中,我们不能使用尚未初始化的类名。

这样的代码可以正常工作,但是如果我切换这些类(现在将它们放在一个文件中)(UPD 用于理解:我所说的切换是将 BookSerializer 放在文件中 AuthorOnlySerializer 的前面),我得到

有什么方法可以避免这些问题并能够将它们按任何顺序排列?我尝试在序列化程序选项中提供符号而不是类,但随后出现

,所以它只支持那里的类。

有什么想法吗?

0 投票
1 回答
2296 浏览

ruby-on-rails - Rails活动模型序列化器,如何返回空字符串而不是null

我必须使用旧版应用程序并且必须重写旧的(PHP 基础)rest api。在旧的 api 中,当一个属性为 null 时,它就变成了一个空字符串。

然而,Rails 只返回一个空值,这会破坏应用程序。重写应用程序不是解决方案(即使这将是最干净的方式)。同样在旧 api 中,其他值是字符串(整数、布尔值、数字)。所以我想知道,如何在不覆盖每个属性的情况下对每个属性执行 to_s。我正在使用活动模型序列化程序。

0 投票
2 回答
240 浏览

javascript - 试图让多对多使用 Rails 和 Emberjs

我正在尝试让多对多的关联与 Ember JS 和 Rails 一起工作,但它似乎并没有呈现Role Name

以下是文件:

用户/index.hbs

用户.js.coffee

角色.js.coffee

user_serializer.rb

role_serializer.rb

role_ids从我的 Rails 应用程序中得到了预期的数组。

但我不知道为什么我没有得到任何东西{{role.name}}

为什么会这样?

JSON

0 投票
0 回答
258 浏览

ruby-on-rails - ActiveModel::ArraySerializer 和 Doorkeeper gem 交互

所以我正在尝试使用rails 4和ruby 2.0.0 ActiveModelSerializer gem(0.8.1)和Doorkeeper gem(实际上是fork(https://github.com/simonbnrd/doorkeeper)来构建rails API应用程序使用这个游戏mongoid 4,但我不认为是这样)。当我启动我的应用程序并使用 ActiveModel::ArraySerializer 创建新对象然后尝试将其呈现为 json - 一切正常。但是,如果我在调用方法(来自 Doorkeeper gem)之后执行相同的操作序列,Doorkeeper::TokensController.create 渲染到 json 应用程序突然返回字符串。试图调查这个问题我找不到 to_json 方法的源代码位置。

这返回

在门卫打电话之前

0 投票
7 回答
7322 浏览

ruby-on-rails - 如何禁用特定控制器的 ActiveModel::Serializers?

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

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

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

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

render :json

和:

render :json => @your_object.to_json

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