Ruby on rails Rails API中的关联不能与Ember应用程序兼容地序列化
我创建了一个Rails API(使用Rails API gem)供我的Ember应用程序使用(使用Ember cli) 我的问题是,我在API中设置的关联似乎并不能完全满足我的Ember应用程序的需求,我也不知道需要更改什么或以不同的方式完成什么 下面,描述了我目前所在的位置以及我采取的步骤Ruby on rails Rails API中的关联不能与Ember应用程序兼容地序列化,ruby-on-rails,ruby,ember.js,ember-cli,Ruby On Rails,Ruby,Ember.js,Ember Cli,我创建了一个Rails API(使用Rails API gem)供我的Ember应用程序使用(使用Ember cli) 我的问题是,我在API中设置的关联似乎并不能完全满足我的Ember应用程序的需求,我也不知道需要更改什么或以不同的方式完成什么 下面,描述了我目前所在的位置以及我采取的步骤 我生成了两个脚手架: rails g scaffold movement name:string movement_type:string rails g scaffold record max_effo
rails g scaffold movement name:string movement_type:string
rails g scaffold record max_effort:integer max_type:string movement:references
产生了:
模型
class Movement < ActiveRecord::Base
end
class Record < ActiveRecord::Base
belongs_to :movement
end
bundle exec rake db:seed
种子(rails/app/db/Seeds.rb)
当我运行rails时,相应的URL显示:
在
在
export default DS.ActiveModelAdapter.extend({
});
序列化程序
export default DS.ActiveModelSerializer.extend({
});
路由器
var Router = Ember.Router.extend({
location: 'auto'
});
export default Router.map(function() {
this.resource('movements', function() {
this.resource('movement', {path: ':id'}, function() {
this.route('records');
});
});
});
export default DS.Model.extend({
name: DS.attr('string'),
movementType: DS.attr('string'),
records: DS.hasMany('record')
});
记录
export default DS.Model.extend({
maxEffort: DS.attr('number'),
maxType: DS.attr('string'),
movement: DS.belongsTo('movement')
});
ember s--proxyhttp://localhost:3000
结果:
所有移动都会在应用程序的UI中按预期进行填充和行为。但是,它们的关联记录并非如此。灰烬检查器显示未加载任何记录 class Movement < ActiveRecord::Base
has_many :records
end
class MovementSerializer < ActiveModel::Serializer
attributes :id, :name, :movement_type
has_many :records
end
类移动
这只是在我尝试运行Rails服务器时产生了一个错误
我的另一个预感是seeds.rb代码是问题所在。这是我第一次使用Faker,但我仍然不是Ruby方面的专家
我被卡住了,我确信这是因为我缺乏使用Ruby/Rails和Ember中的一个或两个的经验。
我希望我在这里所说的一切,对于更有经验的人来说,这将是一个容易发现的错误
谢谢。根据ember json约定,您的记录json应该是这样的 如果绝对必要的话,深度嵌套是有点困难的,因为在同一个模板中使用它们自己的插座。如果没有,就单独走一条路
另外,如果您正在努力进行深度嵌套,您可以创建自己的自定义rest适配器,指向url。回答这个问题可能会晚一些,但如果您可以在
Rails
侧添加embed:id,embed\u in\u root:true
到MovementSerializer
类,这可能会有所帮助。我几乎遇到了同样的问题,但没有补充
export default DS.ActiveModelAdapter.extend({
});
export default DS.ActiveModelSerializer.extend({
});
var Router = Ember.Router.extend({
location: 'auto'
});
export default Router.map(function() {
this.resource('movements', function() {
this.resource('movement', {path: ':id'}, function() {
this.route('records');
});
});
});
export default DS.Model.extend({
name: DS.attr('string'),
movementType: DS.attr('string'),
records: DS.hasMany('record')
});
export default DS.Model.extend({
maxEffort: DS.attr('number'),
maxType: DS.attr('string'),
movement: DS.belongsTo('movement')
});
export default Ember.Route.extend({
model: function(params) {
return this.store.find('movement', params.id);
}
});
export default Ember.Route.extend({
model: function() {
return this.modelFor('movement').get('records');
}
});
class Movement < ActiveRecord::Base
has_many :records
end
class MovementSerializer < ActiveModel::Serializer
attributes :id, :name, :movement_type
has_many :records
end
{
records: [
{
id: 1,
max_effort: 90,
max_type: "rep",
movement_id: 3
}],
movements: [
{
id: 7,
name: "quia",
movement_type: "pushing"
}
{
id: 3,
name: "quia",
movement_type: "pushing"
}
],
}