我认为我对find
模型有一个非常简单的解决方案,其中包含ID以外的属性,但我遇到了一个问题。
Ember Router:
App.Router.map ->
@resource "posts", ->
@route "show", {path: ':slug'}
App.PostsShowRoute = Ember.Route.extend
serialize: (model, params) ->
object = {}
name = params[0]
object[name] = model.get('slug')
return object
model: (params) -> App.Post.find(params.slug)
Rails控制器:
class PostsController < ApplicationController
def show
@post = Post.find_by_slug(params[:id])
render json: @post
end
end
如果params.slug == "some-post"
,当从服务器返回post
对象时,post.id == "some-post"
。这弄乱了所有的联想。
这可能是因为DS.Store
假设我致电find(something)
,something
是id
。我原以为服务器的响应会覆盖这个假设,但事实并非如此。
有更好的方法吗?我的用例非常简单。我需要做的就是用slug属性序列化和反序列化post
对象。
我正在使用Ember Data第11版
答案 0 :(得分:1)
解决方案原来是findQuery
。我不久前用过这个,但我不知道如何利用这个承诺。
model: (params) ->
@get('store').findQuery(App.Post, {slug: params.slug}).then (data) ->
return data.get('firstObject')
并在铁轨方面:
class PostsController < ApplicationController
def index
@posts = params[:slug] ? Post.where(slug: params[:slug]) : Post.homepage
render json: @posts
end