我目前正在rails中构建一个非常简单的API。我需要做的就是在heroku上传文本和图像,将数据存储在S3上的JSON中(因此我猜想在保存时将其渲染为JSON?)并通过AJAX将数据拉入我的前端。我正在使用回形针和'aws-sdk'宝石,我成功地将图像保存到我的S3存储桶中,我只需要将其序列化为JSON。
在我的控制器中我有:
def create
@project = Project.new(project_params)
render :json => @project
@project.save
redirect_to @project
end
我的模特:
class Project < ActiveRecord::Base
has_attached_file :photo, :styles => { :small => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :photo, :content_type => /\Aimage\/.*\Z/
end
在我的制作环境中,我有:
config.paperclip_defaults = {
:storage => :s3,
:s3_credentials => {
:bucket => ENV['S3_BUCKET_NAME'],
:access_key_id => ENV['AWS_ACCESS_KEY_ID'],
:secret_access_key => ENV['AWS_SECRET_ACCESS_KEY']
}
}
目前这只是将图像保存到我的存储桶中的子文件夹中,我想将其保存到一个文件夹中并将其呈现为JSON。如果我遗漏了任何东西,我对rails很新,所以道歉。感谢
答案 0 :(得分:0)
据我所知,你已经让回形针正常工作了,所以你实际上已经有了所需的信息(它们是用回形针保存的),你只需要将它们渲染成JSON即可。您可以忽略paperclip创建的文件夹结构,gem在内部管理它并正确生成URL。
如果您需要JSON响应来响应来自控制器操作的API调用,您只需执行此操作:
render json: { name: @project.photo_file_name, url: @project.photo.url }
当然,您可以使用您需要的任何参数来丰富您的JSON。
这是一个过于简化的答案,要执行此操作,您应该查看JBuilder,并创建JSON视图模板,就像对HTML模板一样。或者覆盖模型中的.as_json(options = nil)
,因此它会在您序列化时自动生成所需的JSON格式。