Ruby on rails Ember、Rails、Amazon S3映像未加载问题
我有一个应用程序,有两个模型图像和项目。一个图像属于一个项目,而一个项目有许多图像 我以前有过这样的设置,图像存储在本地,一切正常,但由于Heroku不支持上传文件的本地存储,我已经设置了一个AmazonS3存储桶来处理图像存储 我遇到的问题是,在我的项目页面上,应该显示项目的第一个图像,但它没有加载或显示任何错误 模型如下: Store.js 样板 串行器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
#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')
});