Ruby on rails Ember、Rails、Amazon S3映像未加载问题

Ruby on rails Ember、Rails、Amazon S3映像未加载问题,ruby-on-rails,json,ember.js,amazon-s3,carrierwave,Ruby On Rails,Json,Ember.js,Amazon S3,Carrierwave,我有一个应用程序,有两个模型图像和项目。一个图像属于一个项目,而一个项目有许多图像 我以前有过这样的设置,图像存储在本地,一切正常,但由于Heroku不支持上传文件的本地存储,我已经设置了一个AmazonS3存储桶来处理图像存储 我遇到的问题是,在我的项目页面上,应该显示项目的第一个图像,但它没有加载或显示任何错误 模型如下: Store.js 样板 串行器 #app/serializers/image_serializer.rb 类ImageSerializer

我有一个应用程序,有两个模型图像和项目。一个图像属于一个项目,而一个项目有许多图像

我以前有过这样的设置,图像存储在本地,一切正常,但由于Heroku不支持上传文件的本地存储,我已经设置了一个AmazonS3存储桶来处理图像存储

我遇到的问题是,在我的项目页面上,应该显示项目的第一个图像,但它没有加载或显示任何错误

模型如下: Store.js 样板 串行器
#app/serializers/image_serializer.rb
类ImageSerializer
使用本地存储时,我的项目模型中没有包含
{async:true}
,但这会产生一个错误,显示:

您在“”上查找了“图像”关系,但未加载某些关联的记录。请确保它们都与父记录一起加载,或者指定关系是异步的(
DS.hasMany({async:true})

但是,然后我指定
{async:true}
,我的图像将不会加载到项目模板上


但是,它们仍然加载到我的项目模板中

我刚刚解决了这个问题

事实证明,您需要明确地将异步关系声明为true或false,而不是完全删除该选项

我的结局是:

#app/assets/javascripts/models/project.js
App.Project = DS.Model.extend({
  name: DS.attr('string'),
  client: DS.attr('string'),
  tags: DS.attr('string'),
  description: DS.attr('string'),
  start_date: DS.attr('string'),
  end_date: DS.attr('string'),

  images: DS.hasMany('image', {async: false}),

  projectDuration: function() {
    return this.get('start_date') + ' to ' + this.get('end_date')
  }.property('start_date', 'end_date'),

  firstImage: function() {
    var projectImages = this.get('images');
    var projectImage = projectImages.get('firstObject');
    return projectImage;
  }.property('images')

});
#app/assets/javascripts/store.js

DS.RESTAdapter.reopen({
  namespace: 'api/v1'
})

App.Store = DS.Store.extend({});
App.ApplicationAdapter = DS.ActiveModelAdapter.extend({});
#app/assets/javascripts/templates/projects.js.emblem

section
  .container
    .row
      .col-xs-12.col-sm-10.col-sm-offset-1.col-md-8.col-md-offset-2
        .row
          each project in controller
            link-to 'project' project
              .col-xs-12
                img.transition src=project.firstImage._project_image 
                h1.text-center.text-uppercase = project.client
                p.subtext.text-center = project.tags
#app/serializers/image_serializer.rb

class ImageSerializer < ActiveModel::Serializer
  attributes :id, :_project_image, :_project_id
  def _project_image
    object.project_image.to_s
  end

  def _project_id
    object.project_id.to_i
  end
end

#app/serializers/project_serializer.rb

class ProjectSerializer < ActiveModel::Serializer

  attributes :id, :name, :client, :tags, :description, :start_date, :end_date
  has_many :images, embed: :ids, include: true

end
#app/assets/javascripts/models/project.js
App.Project = DS.Model.extend({
  name: DS.attr('string'),
  client: DS.attr('string'),
  tags: DS.attr('string'),
  description: DS.attr('string'),
  start_date: DS.attr('string'),
  end_date: DS.attr('string'),

  images: DS.hasMany('image', {async: false}),

  projectDuration: function() {
    return this.get('start_date') + ' to ' + this.get('end_date')
  }.property('start_date', 'end_date'),

  firstImage: function() {
    var projectImages = this.get('images');
    var projectImage = projectImages.get('firstObject');
    return projectImage;
  }.property('images')

});