具有ID以外的属性的Ember路由/查找

时间:2013-04-13 22:35:44

标签: ember.js ember-data

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

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

我正在使用Ember Data第11版

1 个答案:

答案 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