【问题标题】:Ember Routing/Lookup with Attributes other than ID具有 ID 以外的属性的 Ember 路由/查找
【发布时间】: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 上使用 findQuerythen 函数。在下面回答我自己的问题。

标签: ember.js ember-data


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2013-11-02
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多