Así, encontré this pull request en github. Es 8 meses de edad, por lo que no funcionará debido a la complejidad añadida desde entonces, pero he implementado la solución sugerida, así:
App.store = DS.Store.create({
revision: 4,
adapter: DS.RESTAdapter.create({
plurals: {
'cart': 'cart'
}
})
});
App.Cart.reopenClass({
find: function() {
this._super("singleton");
}
});
En mi servidor (estoy usando rieles), tengo que añadir el siguiente a mis rutas:
get "cart/:ignored" => "carts#show"
entonces tengo que añadir lo siguiente a CartSerializer
(usando active_model_serializers joya):
attributes :id
def id
"singleton"
end
Esto es necesario, ya que, al parecer, si el id en la respuesta json no coincide con el ID solicitado de find() (singleton
en este caso), entonces ember no cargará los datos en el modelo.
Ahora bien, obviamente esta no es la solución ideal, pero hasta que los datos de ember no lo añadan, parece que es la forma menos dolorosa de hacerlo.
Por cierto, presenté an issue para agregar soporte.
Reemplazando la función buildURL se aplicará a todos los modelos, ¿verdad? ¿Qué hay de mis modelos no singulares? Además, incluso si cambio los plurales, 'find()' (sin argumentos) espera una matriz de objetos, por lo que no funcionará. Y si paso una identificación falsa para encontrar, entonces tengo que modificar las rutas de mi servidor para aceptar un argumento de id ('/ cart /: fake_id') solo para ignorarlo por completo. Parece demasiado hacky para algo tan común y simple. –
Build URL puede hacer algo como esto: '' if (record.get ('singularResouce') {...} else {this._super.apply (this, arguments);} ''. The (...) puede sea su propia función de creación de URL, y sus modelos singulares tendrán '' DS.Model.extend ({singularResouce: true}) ''. – Ryan
Incluso puede hacer algo llamativo como llamar '' buildUrl'' de nuevo, pero pase indefinido como el id. – Ryan