【问题标题】:Sideloading with Ember ActiveModelAdapter and Rails使用 Ember ActiveModelAdapter 和 Rails 进行旁加载
【发布时间】:2014-12-29 16:36:28
【问题描述】:

我有两个模型:

user: [ 
  firstName: DS.attr('string'),
  lastName: DS.attr('string'),
  animals: DS.hasMany('animal', { async: true })
]

animal: [ 
  name: DS.attr('string'),
  user: DS.belongsTo('user', { async: true })
]

当我看到动物路线一切正常时,rails 返回的 JSON 如下:

{"animals":[{"id":1,"name":"Wiskey","user_id":3}

Ember 为 user/3 调用 GET。

当我尝试查找所有用户时,我拥有的是这个 json:

{"users":[{"id":3,"firstName":"Bob","lastName":"Marley","animal_ids":[4,8,14]}

但没有为动物 4、8 和 14 调用 GET。 问题是什么?我使用的适配器是 ActiveModelAdapter。

谢谢!

【问题讨论】:

    标签: ruby-on-rails json ember.js relationships activemodel


    【解决方案1】:

    查看活动模型序列化程序 gem (here),了解如何让 rails 在一次调用中返回用户和动物

    还有一个很好的关于它的railscast here

    【讨论】:

      【解决方案2】:

      您必须尝试访问 Ember Data 的 animals 关系才能请求其他记录。如果它没有在模板中显示或在其他地方访问,则无需向服务器发出请求。

      它可能没有发出请求的另一个原因是,如果另一个对服务器的调用已经导致 Ember Data 将这些记录加载到存储中。如果它已经保存了这些记录,那么它不会尝试再次加载它们,除非明确要求这样做。

      【讨论】:

      • 很好的解释。从她的标题来看,听起来她期待animals 自动“侧载”,但这并没有发生
      • 是的,我需要自动获取数据。我认为不是 rails 问题,而是 ember 问题,因为当我让用户开始获取相关动物时。也许错过了一些设置。我尝试以这种方式使用 ActiveModelSerializer 序列化数据 DS.ActiveModelSerializer.extend(DS.EmbeddedRecordsMixin, {attrs:{animals: { serialize: 'ids' }}});但什么都没有。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-16
      相关资源
      最近更新 更多