【发布时间】:2013-04-13 22:35:44
【问题描述】:
我以为我对find 具有除 ID 以外的属性的模型有一个相当简单的解决方案,但我遇到了一个问题。
当前设置:
Ember 路由器:
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
【问题讨论】:
-
您是否已经尝试过
App.Post.find('slug': params.slug)而不是App.Post.find(params.slug)?此外,在 ember 端使用ActiveModel::Serializer而不是序列化函数可能会有所帮助。 -
我正在使用
ActiveModel::Serializer。解决方案是在返回的 Promise 上使用findQuery和then函数。在下面回答我自己的问题。
标签: ember.js ember-data