active-model-adapter, Rails的ActiveModel适配器和序列化器

分享于 

7分钟阅读

GitHub

  繁體 雙語
Adapters and Serializers for Rails's ActiveModel::Serializers
  • 源代码名称:active-model-adapter
  • 源代码网址:http://www.github.com/ember-data/active-model-adapter
  • active-model-adapter源代码文档
  • active-model-adapter源代码下载
  • Git URL:
    git://www.github.com/ember-data/active-model-adapter.git
    Git Clone代码到本地:
    git clone http://www.github.com/ember-data/active-model-adapter
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/ember-data/active-model-adapter
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    数据ActiveModel适配器 Build Status

    安装

    CLI

    ember install active-model-adapter

    Rails

    这个 gem 带着 Rails。 如果要在 Gemfile 中指定特定版本,则可以引用 active-model-adapter-source gem,并将由 Ember Rails 加载:

    gem 'active-model-adapter-source', '~>2.0'# or whatever version you need

    Bower

    bower install --save active-model-adapter

    脚本标记

    http://github.com/ember-data/active-model-adapter-dist 获取 active-model-adapter.js的副本。

    用法

    如果你还没有 ApplicationAdapter,则应该创建一个:

    // app/adapters/application.jsimportActiveModelAdapterfrom'active-model-adapter';exportdefaultActiveModelAdapter.extend();

    如果需要子类化 ActiveModelSerializer,则可以将它的导入到序列化程序中:

    // app/serializers/post.jsimport { ActiveModelSerializer } from'active-model-adapter';exportdefaultActiveModelSerializer.extend();

    描述

    ActiveModelAdapter是RESTAdapter的一个子类,用于与一个使用突出显示命名约定而不是camelCasing的JSON API集成。

    已经设计为使用 active_model_serializers ruby gem 进行工作。 这里适配器需要使用 ActiveModel::Serializers的特定设置, embed :ids, embed_in_root: true 记录是哪个 sideloads。

    JSON结构

    ActiveModelAdapter期望从服务器返回的JSON遵循REST适配器约定替换camelcased的突出显示的键。 ds,异步关系键必须是关系的单数形式,之后是 DS.belongsTo的"_id",或者 DS.hasMany 关系的"_ids"。

    但是,由于 ActiveModelAdapter 2.1.0,你不需要键的"_id"或者"_ids"后缀。

    常规名称

    JSON负载中的属性名应该是 Ember.js 模型中属性的简化版本。 例如如果你有一个 Person 模型:

    // app/models/famous-person.jsexportdefaultvar FamousPerson =DS.Model.extend({
     firstName:DS.attr('string'),
     lastName:DS.attr('string'),
     occupation:DS.attr('string')
    });

    返回的JSON应该如下所示:

    {
     "famous_person": {
     "id":1,
     "first_name":"Barack",
     "last_name":"Obama",
     "occupation":"President" }
    }

    让我们假设 OccupationPerson 只是另一个模型:

    // app/models/person.jsexportdefaultvar Person =DS.Model.extend({
     firstName:DS.attr('string'),
     lastName:DS.attr('string'),
     occupation:DS.belongsTo('occupation')
    });// app/models/occupation.jsApp.Occupation=DS.Model.extend({
     name:DS.attr('string'),
     salary:DS.attr('number'),
     people:DS.hasMany('person')
    });

    要避免额外的服务器调用所需的JSON,应该如下所示:

    {
     "people": [{
     "id":1,
     "first_name":"Barack",
     "last_name":"Obama",
     "occupation_id":1 }],
     "occupations": [{
     "id":1,
     "name":"President",
     "salary":100000,
     "person_ids": [1]
     }]
    }

    多态关系

    如果模型具有多态关系,则ActiveModelAdapter支持响应中的两种形式。

    在 Rails 中使用ActiveModelSerializers时,你可以在调用 has_many 或者 belongs_to 时使用 polymorphic: true 选项选择这里负载。

    classBookSerializer attributes :id, :name belongs_to :person, polymorphic:trueend

    第一个和首选格式是使用关系的NAME 作为键,将类型和外键作为值作为值。

    例如给出了以下模型定义:

    // app/models/book.jsexportdefaultvar Book =DS.Model.extend({
     name:DS.attr(),
     author:DS.belongsTo('person', {polymorphic:true})
    });// app/models/author.jsexportdefaultvar Person =DS.Model.extend({
     name:DS.attr(),
     books:DS.hasMany('book')
    });

    对象将类似于:

    {
     "type": "person",
     "id": 1}

    而完整的负载将如下所示:

    {
     "book": {
     "id":"1",
     "name":"Yes, Please",
     "author": { // these are the lines"id":1, // that define the"type":"person"// polymorphic relationship }
     },
     "people": [{
     "id":1,
     "name":"Amy Poehler" }]
    }

    第二种格式允许你使用 relationship_name_idrelationship_name_type的格式在模型的负载中使用两个键。 这里格式对关系不适用。 :对于Ember数据也可以删除这里格式 currently目前仅支持 legacy。

    使用上述模型定义,单个模型响应将如下所示:

    {
     "book": {
     "id":"1",
     "name":"Yes, Please",
     "author_id":1, // these two lines"author_type":"person"// tell Ember Data what the polymorphic// relationship is. }
    }

    完整的响应将如下所示:

    {
     "book": {
     "id":"1",
     "name":"Yes, Please",
     "author_id":1, // these two lines"author_type":"person"// tell Ember Data what the polymorphic// relationship is. },
     "people": [{
     "id":1,
     "name":"Amy Poehler" }]
    }

    插件开发安装

    • git clone 这里存储库
    • npm install
    • bower install

    运行测试

    • ember test
    • ember test --server

    建筑

    • ember build

    有关使用ember的更多信息,请访问 http://www.ember-cli.com/


    rails  act  ADA  Active  适配器  serialize  
    相关文章