标签: active-model-serializers

如何使用active_model_serializers默认包含所有属性并过滤它们?

我正在使用active_model_serializers,并希望找到一种方法来默认包含所有模型的属性,然后使用这样的东西

       exclude :date_created, :first_name
Run Code Online (Sandbox Code Playgroud)

指定我不需要的那些.

到目前为止,我没有找到一种方法来指定除了文档中的属性之外的导出属性,并且通过枚举所有需要的属性来完成:

       attributes :title, :body
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails active-model-serializers

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

使用Rails + active_model_serializers在EmberJS中加载具有非标准类名的对象

我在Rails中有一些模型看起来像这样:

class Issue < ActiveRecord::Base
  belongs_to :reporter, class_name: 'User'
  belongs_to :assignee, class_name: 'User'
  has_many :comments
end

class User < ActiveRecord::Base
end

class Comment < ActiveRecord::Base
end
Run Code Online (Sandbox Code Playgroud)

像这样的序列化器:

class IssueSerializer < ActiveModel::Serializer
  attributes :id
  embed :ids, include: true

  has_one :reporter, :embed => :ids
  has_one :assignee, :embed => :ids
end

class UserSerializer < ActiveModel::Serializer
  attributes :id, :name
end

class CommentSerializer < ActiveModel::Serializer
  attributes :id, :body
end
Run Code Online (Sandbox Code Playgroud)

这会生成类似于以下内容的JSON:

{
  "issues": [
    {
      "id": 6,
      "reporter_id": 1,
      "assignee_id": 2,
      "comment_ids": [
        3
      ]
    }, …
Run Code Online (Sandbox Code Playgroud)

ember.js ember-data active-model-serializers

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

Active Model Serializer,测试使用哪个序列化器来呈现响应

我正在使用活动模型序列化器来从rails控制器呈现JSON响应.

我有这样的控制器动作:

def show
  @foo = Foo.find(params[:id])
  if @foo.user == current_user
    render json: @foo, serializer: FooSerializer
  else
    render json: @foo, serializer: TrimmedFooSerializer
  end
end
Run Code Online (Sandbox Code Playgroud)

我希望能够测试在我的Rspec控制器测试中使用了哪个序列化器.是否有可能从测试中获得对序列化器的引用?

更新:

我不认为这是正确使用序列化器.我现在在序列化程序本身中有逻辑来有条件地包含属性.控制器不应该真正关心使用哪个序列化器.

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

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

如何在Rails Active Model Serializer v0.8中有条件地包含关联

我已经将AMS(0.8)与Rails 3.2.19一起使用,但我真正为它们努力的一个地方是如何控制序列化器是否包含它们的关联.我显然使用AMS来构建JSON Api.有时,序列化程序是叶子或最远的元素,有时它是顶级的,需要包含关联.我的问题是这样做的最佳方式是什么,或者是我在下面工作的解决方案(或者是最佳解决方案).

我已经看到了一些讨论,但我发现它们非常令人困惑(并且基于版本).很明显,对于Serializer属性或关联,有一个include_XXX?每个方法,你可以在这里返回truthy或falsey语句.

这是我提出的代码 - 它是一个拥有许多wine_items的酿酒师.这是你怎么做的?

模型类:

class WineItem < ActiveRecord::Base
  attr_accessible :name, :winemaker_id
  belongs_to :winemaker

end

class Winemaker < ActiveRecord::Base
  attr_accessible :name
  has_many :wine_items
  attr_accessor :show_items
end
Run Code Online (Sandbox Code Playgroud)

串行器:

class WinemakerSerializer < ActiveModel::Serializer
  attributes :id, :name
  has_many :wine_items 

  def include_wine_items?
    object.show_items
  end
end

class WineItemSerializer < ActiveModel::Serializer
  attributes :id, :name
end
Run Code Online (Sandbox Code Playgroud)

在我的控制器中:

class ApiWinemakersController < ApplicationController
  def index
    @winemakers=Winemaker.all
    @winemakers.each { |wm| wm.show_items=true }
    render json: @winemakers, each_serializer: WinemakerSerializer, root: "data"
  end
end
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails active-model-serializers

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

如何避免ActiveModel Serializers中的多个SQL调用?

我发现当我使用ActiveModel Serializers为一组包含关联的模型生成JSON时,会导致大量的SQL查询(每个关联一个).我怎么能避免这个?

我试过在控制器中做一个include:

render json: Project.includes(tasks: [:workers])
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用.即使我将关系(包含)直接传递给ArraySerializer,它也无济于事.

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

6
推荐指数
1
解决办法
963
查看次数

Ember.JS ActiveModelAdapter和Active Model Serializers的默认行为

我有一个简单的活动模型序列化器:

class ActivitySerializer < ActiveModel::Serializer
  attributes :id, :title, :description, :time
  has_one :category
  has_one :user
end
Run Code Online (Sandbox Code Playgroud)

我也有类别和用户序列化程序,它们按预期工作.我得到这个有效载荷:

{"activities":[{"id":1,"title":"Test Activity","description":null,"time":"2014-03-01T06:05:41.027Z","category":{"id":1,"title":"Sports"},"user":{"id":1,"name":"ember"}}]}
Run Code Online (Sandbox Code Playgroud)

然而,它们似乎并没有加载到余烬中.

App.Activity = DS.Model.extend
  title: DS.attr('string')
  description: DS.attr('string')
  time: DS.attr('date')
  category: DS.belongsTo('category')
  user: DS.belongsTo('user')

App.Category = DS.Model.extend
  title: DS.attr('string')
  activities: DS.hasMany('activity')

App.User = DS.Model.extend
  name: DS.attr('string')
  activities: DS.hasMany('activity')
Run Code Online (Sandbox Code Playgroud)

当我检查ember检查器时,没有加载数据.ActiveModelSerializer期望什么样的格式?它加载活动但不加载类别或用户属性.

ember.js ember-data active-model-serializers

6
推荐指数
1
解决办法
2776
查看次数

如何在没有Active Record Model的情况下使用Active Model Serializer?

我想获取pl/pgsql函数的结果,该函数返回一组记录和用户AMS以序列化结果.我怎样才能做到这一点?

ruby-on-rails plpgsql pg active-model-serializers

6
推荐指数
1
解决办法
2647
查看次数

ActiveModel Serializers:has_many在运行时有条件吗?

我使用rails(5.0.1)和active_model_serializers(0.10.2).我想以某种方式有条件地序列化has_many关联:

class Question < ApplicationRecord
    has_many :responses, :inverse_of => :question
end

class Response < ApplicationRecord
    belongs_to :question, :inverse_of => :responses
end

class QuestionSerializer < ActiveModel::Serializer
  attributes :id, :title, :created_at, :updated_at
  has_many :responses
end

class ResponseSerializer < ActiveModel::Serializer
  attributes :id, :title
end
Run Code Online (Sandbox Code Playgroud)

我使用jsonapi并查询http://localhost:3000/api/questions/1我得到这个回复:

回应1:

{
  "data": {
    "id": "1",
    "type": "questions",
    "attributes": {
      "title": "First",
      "created-at": "2017-02-14T09:49:20.148Z",
      "updated-at": "2017-02-14T13:55:37.365Z"
    },
    "relationships": {
      "responses": {
        "data": [
          {
            "id": "1",
            "type": "responses"
          }
        ]
      }
    }
  } …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails active-model-serializers

6
推荐指数
2
解决办法
3448
查看次数

django.core序列化程序和Django Rest Framework序列化程序之间的区别

我现在正在学习Django,我刚刚听说了Django Rest Framework(DRF)。我想知道django.core序列化程序和rest_framework序列化程序之间有什么区别。是的,我知道DRF适用于API。

python django python-3.x django-rest-framework active-model-serializers

6
推荐指数
1
解决办法
690
查看次数

尝试升级 Rails 依赖项会导致序列化程序引发错误:Hash:Clas 的未定义方法“model_name”

几个月前,我已将已建立的 Rails 应用程序上的 Rails 升级到 5.2.4.2,并进行了最少的 Rails 依赖升级;该应用程序再次稳定下来,因此我们决定将所有 Rails 依赖项升级到最新的兼容版本。

现在,只要控制器对简单(非数据库模型)类进行 json 渲染调用,就会显示错误消息。

例子

这是序列化器:

class Api::MessageResponseSerializer < ApplicationSerializer
  self.version = 1

  attributes :message, :changes

  def message
    self.object[:message]
  end

  def changes
    self.object[:changes]
  end
end
Run Code Online (Sandbox Code Playgroud)

呼叫

render :json => { :message => "Not Ready Yet"}, :serializer => Api::MessageResponseSerializer
Run Code Online (Sandbox Code Playgroud)

我收到错误:

NoMethodError:
       undefined method `model_name' for Hash:Class
Run Code Online (Sandbox Code Playgroud)

呼叫

render :json => [{ :message => "Not Ready Yet"}], :serializer => Api::MessageResponseSerializer
Run Code Online (Sandbox Code Playgroud)

我收到错误:

 NoMethodError:
       undefined method `model_name' for Array:Class

Run Code Online (Sandbox Code Playgroud)

调用(我知道这个不是正确的json,它在这里只是为了举例说明发生相同的错误)

render :json => 1, :serializer …
Run Code Online (Sandbox Code Playgroud)

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

6
推荐指数
1
解决办法
1976
查看次数