检索Backbone / Rails中的子记录

时间:2013-09-11 19:03:31

标签: javascript ruby-on-rails backbone.js

我有一个带有省.rb模型的Rails应用程序,该模型与City.rb模型具有has_many关系。在省控制器的show动作中,我这样做

@province= @province.cities
render json: @province, root: false

能够在渲染时从省内获取城市。这对Rails来说很容易,但我正在使用Backbone中的JSON数据。当我在Backbone中渲染省份对象时,它没有可用的城市

_changing: false
_events: Object
_pending: false
_previousAttributes: Object
attributes: Object
id: 14
name: "Ontario"
__proto__: Object
changed: Object
cid: "c501"
collection: child
id: 14
__proto__: Surrogate

问题1.有没有办法让省内的城市可用?所以我可以用javascript调用province.cities吗?

无法通过省份对象访问城市,我尝试根据路由器中的showProvince方法中的省ID来查询城市

  self.provinces = app.collections.provinces.get(id); 
  self.cities = app.collections.cities.where({province_id: id}).fetch() //doesn't work

但是在指定where后我无法调用fetch。另外,如果我停止提取,并以这种方式尝试,我无法在where方法上使用成功回调,因此,self.cities在console.log中未定义,因为代码在查询结束之前已经开始了。

  self.cities = app.collections.cities.where({province_id: id}, {
                success: function(){
                      no success callback, how to process data

                }
            });
 console.log(self.cities)//undefined

问题2:如何使用父ID查询has_many关联?

假设我能够检索对应于该省的城市记录,我不知道如何将两者合并为几个

this.showView( '#main', new app.Views.ProvinceView({model:self.province}) );

如果能够检索到该省,我将如何包含该省的城市?我应该尝试将它们与省合并,还是可以用其他方式包含它们?

1 个答案:

答案 0 :(得分:0)

因为我正在使用Active Model Serializer,所以我必须在序列化程序中声明关系,然后在省对象上可以使用子城市

class ProvinceSerializer < ActiveModel::Serializer
  attributes :id, :name

  has_many :cities
end

无需尝试执行此任何操作

self.cities = app.collections.cities.where({province_id: id}).fetch() //doesn't work