访问与Ember.js的rails关系

时间:2013-06-21 01:01:21

标签: javascript ruby-on-rails ruby ember.js ember-data

我刚刚开始学习ember并且正在编写一个从数据库中读取的简单应用程序。我已经得到它与夹具一起工作我想要什么,并刚开始从数据库读取一些进展。现在我的问题是我无法访问子元素 - 我有一个父类,我通过序列化程序使用json响应,我在json请求中提供子元素。但是,我不知道从这里去哪里获取ember中的父类来读取和显示子元素。使用下面的代码可能会更有意义。

如果您需要任何其他代码,请告诉我 - 所有标准的Ember代码都没有规格!我唯一的主要目标是当前嵌套的ruby路由作为同类群组使用:/ id / boots /:id使用fixture数据加载时的ember /:id /:id:)

型号:

Plato.Boot = DS.Model.extend(
    name: DS.attr("string"),
    cohort: DS.belongsTo('Plato.Cohort'),
    hubs: DS.hasMany('Plato.Hub')
)
Plato.Cohort = DS.Model.extend(
  name: DS.attr('string'),
  boots: DS.hasMany('Plato.Boot')
)

Route.rb

  root to: 'application#index'

  resources :cohorts do
    resources :boots
  end

  resources :boots

群组(父母)控制器

class CohortsController < ApplicationController
    respond_to :json
  def index
    respond_with Cohort.all
  end

  def show
    respond_with Cohort.find(params[:id])
  end
end

引导(子)控制器

class BootsController < ApplicationController
    respond_to :json
  def index
    respond_with Boot.all
  end

  def show
    respond_with Boot.find(params[:id])
  end
end

Router.js.coffee

Plato.Router.map ()->
    this.resource('cohorts', ->
    this.resource('cohort', {path: '/:cohort_id'}, ->
        this.resource('boot', {path: 'boots/:boot_id'})
    )
  )

Plato.CohortsRoute = Ember.Route.extend(
    model: ->
        Plato.Cohort.find()
)

Plato.BootsRoute = Ember.Route.extend(
    model: -> 
        Plato.Boot.find(params)
)

1 个答案:

答案 0 :(得分:1)

您是否尝试在路由器地图中定义嵌入式记录boots

例如:

Plato.Adapter = DS.RESTAdapter.extend();

Plato.Store = DS.Store.extend({
  adapter: Plato.Adapter
});

Plato.Adapter.map('Plato.Cohort', {
  boots: {embedded: 'always'}
});

这样嵌入的记录将与父记录一起加载。

希望它有所帮助。