gpt4 book ai didi

ruby-on-rails - Ember 模型只加载最后一条记录

转载 作者:行者123 更新时间:2023-12-02 05:45:04 25 4
gpt4 key购买 nike

我正在尝试重现 Railscasts 410示例(称为 Raffler),更改最新版本的设置并符合我的习惯:

  • Ember 1.0.0-rc.6
  • rails 4.0.0
  • Mongoid 大师 (4.0)
  • 火腿 4
  • 会徽 0.3.0

在这个示例项目中,我们创建了一个简单的模型Entry,它调用了一个小型 Rails Rest API。

一切都按预期工作,除了调用 Raffler.Entry.find() 以获取所有条目仅加载最后一条记录。

这是我的模型:

Raffler.Entry = DS.Model.extend
name: DS.attr('string')
winner: DS.attr('boolean')

我的商店:

DS.RESTAdapter.configure('plurals', entry: 'entries')

Raffler.Store = DS.Store.extend
revision: 12
adapter: DS.RESTAdapter.create()

当调用 Raffler.Entry.find() 时,http://localhost:3000/entries 上有一个 AJAX 请求,所有记录都被返回(所以我不不认为问题出在服务器端):

{"entries":[{"id":{"$oid":"51e5b35b492cd4d286000001"},"name":"Foo","winner":true},{"id":{"$oid":"51e5b35b492cd4d286000002"},"name":"Bar","winner":false},{"id":{"$oid":"51e5b384492cd4d286000003"},"name":"Baz","winner":true}]}

但只有这些记录中的最后一个真正加载到模型中。

在 JS 控制台中:

e=Raffler.Entry.find()
e.toArray().length
=> 1
e.objectAt(0).get('name')
=> "Baz" (always the last one)
e.objectAt(1)
=> undefined

最佳答案

我终于找到了问题的原因(感谢 this question):这是因为,默认情况下,Mongoid 以 {"id"格式返回带有 id 的 JSON :{"$oid":"51e5b35b492cd4d286000001"},Ember 似乎不明白。

通过在我的 Rails Entry 模型上添加这个序列化程序:

class EntrySerializer < ActiveModel::Serializer
attributes :id, :name, :winner

def id
object._id.to_s
end

end

API 请求现在响应此(注意不再有 $oid):

{"entries":[{"id":"51e5b35b492cd4d286000001","name":"Foo","winner":true},{"id":"51e5b35b492cd4d286000002","name":"Bar","winner":false},{"id":"51e5b384492cd4d286000003","name":"Baz","winner":true}]}

Ember 现在加载所有记录:

Raffler.Entry.find().toArray().length
=> 3

编辑:请注意,这是 Mongoid 4 特有的问题,因为早期版本中未使用 $oid 符号。这是对现有 Rails 3.2/Mongoid 3.0 应用程序的测试:

1.9.3-p194 :006 > Mongoid::VERSION
=> "3.0.23"
1.9.3-p194 :007 > Node.first.id.as_json
=> "507521e68df996381b00151b"

现在在 Rails 4/Mongoid 4 下进行我的 Ember 测试:

2.0.0-p247 :007 > Mongoid::VERSION
=> "4.0.0"
2.0.0-p247 :008 > Entry.first.id.as_json
=> {"$oid"=>"51e5b35b492cd4d286000001"}

我已将 mongoid 标记添加到我的问题中。

Serializer 解决方案运行良好,但它意味着为每个 Mongoid 模型创建一个序列化器...只是为了返回 Mongoid 3 行为...不是那么干净...

关于ruby-on-rails - Ember 模型只加载最后一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17692851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com