Ember和Rails一对多关系

时间:2013-07-21 02:15:29

标签: ruby-on-rails ember.js ember-data nested-routes

我一直在尝试在同一视图中呈现数据,但似乎无法正确使用。我希望能够在显示出口位置的每个位置呈现评级。

这就是我所拥有的。

我尝试过不同的路由和不同的资源嵌套,以及在rails控制器中渲染不同的东西。我可以找回正确评级的哈希,但不知道如何显示它。

我假设我的rails控制器出了问题,或者我需要在Handlebars视图中做些什么。我已经尝试了很多东西,所以我甚至没有发布我的东西。如果这个Ember的东西是正确的,那么使用把手和导轨控制器进行渲染的正确方法是什么。

App.Router.reopen
  location: 'history'
  rootURL: '/'

App.Router.map ->
  @resource 'users', ->
    @route 'new',
@route 'edit',
      path: '/:user_id/edit'
    @route 'show',
      path: '/:user_id'
  @resource 'locations', ->
    @route 'new',
    @route 'show',
      path: '/:location_id'
  @resource 'ratings', ->
    @route 'new',
    @route 'show',
      path: '/:ratings_id'

App.Rating = DS.Model.extend(
  rating: DS.attr('string', defaultValue: "-0")
  description: DS.attr('string', defaultValue: "No Description Provided")
  location: DS.belongsTo("App.Location")
  )

App.Location = DS.Model.extend(
  name: DS.attr('string', defaultValue: "")
  address:  DS.attr('string', defaultValue: "")
  city: DS.attr('string', defaultValue: "")
  state:DS.attr('string', defaultValue: "")
  ratings: DS.hasMany('App.Rating')
  fullAddress: (->
    "http://maps.google.com/?q=#{@get('address')},#{@get('city')},#{@get('state')}}"
  ).property('address')
)


App.Store = DS.Store.extend(
  revision: 11
  adapter: DS.RESTAdapter.create(mappings:
    ratings: App.Rating
  )
)

1 个答案:

答案 0 :(得分:0)

没有模板,路线或控制器,很难分辨。

由于模型之间存在关联,因此在模板中引用它的方式为location.ratings,其中location将是#each中的变量。这非常有效。如果您已经加载了评级,您将立即访问它们。或者它会请求从服务器获得这些评级。

引用来自不同控制器的数据的另一个主要想法是使用needs API。

needs: 'foo',
ratingsBinding: 'controllers.foo'