1

我以为我对具有find除 ID 以外的属性的模型有一个相当简单的解决方案,但我遇到了一个问题。

当前设置:

灰烬路由器:

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)

导轨控制器:

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。我原以为来自服务器的响应会覆盖这个假设,但事实并非如此。

有一个更好的方法吗?我的用例非常简单。我需要做的就是post通过 slug 属性对对象进行序列化和反序列化。

我正在使用 Ember Data 修订版 11

4

1 回答 1

1

解决方案原来是findQuery。我前段时间正在使用它,但我不知道如何使用promise。

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
于 2013-04-15T20:45:44.880 回答