当保存嵌套资源时(保存属于属性的高亮显示),Ember似乎不会在嵌套路由层次结构上拾取并且' POSTS'只是' api / v1 / highlight'当我需要它来发布' POST'到' api / v1 / properties / property_id / highlight'。所以我考虑在后端取消嵌套路由以解决它并以某种方式传递property_id,但是能够让它理解正确的路由会容易得多。我遇到了buildURL mixin来为每次构建正确的路径,并且想知道这是否是最好的方法,并且我做错了什么?
感谢您提前获得所有帮助
以下是我的代码的一部分......
的routes.rb
namespace :api, defaults: { format: :json } do
namespace :v1 do
resources :users, only: [:show, :update]
resources :user_devices, only: [:show]
resources :properties do
resources :highlights do
resources :options
end
end
resources :fields
end
端
router.js
this.route('properties', function() {
this.route('new');
this.route('property', {path: ':property_id'}, function() {
this.route('edit');
this.route('details');
this.route('highlights', function() {
this.route('new');
this.route('highlight', {path: ':highlight_id'}, function() {
this.route('edit');
this.route('options', function() {
this.route('new');
this.route('option', {path: ':option_id'}, function() {
this.route('edit');
});
});
});
});
适配器
import Ember from 'ember';
export default Ember.Mixin.create({
host: 'http://localhost:3000',
namespace: 'api/v1'
});
在highlight.js中突出显示模型
property: DS.belongsTo('property', {async: true }),
property.js中的属性模型
highlights: DS.hasMany('highlight', {async: true }),
答案 0 :(得分:0)
使用ember-data时的一般惯例是每个模型端点都是彼此的兄弟。
如果你真的想要这样做,你将不得不构建自己的适配器,这比按照惯例做更多的努力。
所以您的routes.rb看起来像
namespace :api, defaults: { format: :json } do
namespace :v1 do
resources :users, only: [:show, :update]
resources :user_devices, only: [:show]
resources :properties
resources :highlights
resources :options
end
resources :fields
end
模型/ highlights.js
export default Model.extend({
property: DS.belongsTo('property', {async: true })
})
模型/ property.js
export default Model.extend({
property: DS.hasMany('highlight', {async: true })
})
模型/ options.js
export default Model.extend({
property: DS.belongsTo('highlight', {async: true })
})
属性控制器中的操作,例如
save:function(){
highlight.save().then(function(highlight){
property.get(highlights).pushObject(highlight);
property.save();
});
}
当property.save执行时,您的适配器会自动将highlight_ids :[1]
添加到它发送给服务器的有效负载