因此,在我的网站上,用户可以上传“灵感”,即用户感到鼓舞人心的图片或文字。
现在我要创建一个功能,比如pinterest,用户可以点击预装的图片或文字来“固定”,除了我的按钮说 - “让我的灵感”。
我不确定在这个页面上我是否正在创建: pages / suggested_inspirations.html.erb 如果我应该通过资产/图片或AWS亚马逊上传建议的图片?在后一种情况下,我会向 inspirations / new.html.erb 添加一个复选框,仅对管理员用户可见,如果点击该复选框,则会将灵感保存到我的suggest_inspirations页面。
我将AWS Amazon-S3用于用户上传的图像。现在我正在进行免费计划。
答案 0 :(得分:0)
从评论部分复制
似乎您的问题更多的是关于您的应用程序的大小。如果您要提供数百万张图片并且速度是一个因素,我建议您选择亚马逊S3。由于您已经在AWS堆栈上,因此它可以简化您的扩展。在您的服务器上存储图像会阻止您进行缩放,会降低图像服务部分的速度,此外您还必须处理图像查看限制(管理员与非管理员),如果您在s3上,则可以轻松实现。
我从一开始就使用s3。另外,为您的存储桶设置云端。 aws.amazon.com/cloudfront鉴于您的需求,成本应该非常便宜。在s3上传图像时也不要忘记设置正确的缓存控制标题:)
答案 1 :(得分:0)
这听起来好像你对结构感到困惑
用户可以点击预先加载的图片或文字来“固定”#34;
这应该使用连接表:
#app/models/user.rb
class User < ActiveRecord::Base
has_many :uploads
has_many :likes
has_many :liked_uploads, through: :likes, class_name: "Upload", association_foreign_key: :upload_id
end
#app/models/like.rb
class Like < ActiveRecord::Base
belongs_to :user
belongs_to :upload
end
#app/models/upload.rb
class Upload < ActiveRecord::Base
belongs_to :user #-> uploader
has_many :likes
has_attached_file :image #-> paperclip
end
这样,您就可以拥有尽可能多的&#34;上传内容&#34;如你所愿(IE用户可以上传图片或文字),然后拥有尽可能多的用户&#34;喜欢&#34;它
图片将上传一次(single source of truth),任何人都喜欢&#34;喜欢&#34;它只会通过连接模型添加一个引用:
#config/routes.rb
resources :inspirations do
match :like, via: [:post, :delete], on: :member #-> url.com/inspirations/:id/like
end
#app/controllers/inspirations_controller.rb
class InspirationsController < ApplicationController
before_action :authenticate_user!, only: :like
def like
@inspiration = Upload.find params[:id]
if request.post?
current_user.likes << @inspiration
elsif request.delete?
current_user.likes.delete @inspiration
end
end
end
您可以更改上述方式。
用户可以上传&#34;灵感&#34;又名照片
如果您有支持它的模型,则只能 。 Paperclip
和Carrierwave
是最好的宝石。
您无法将图片上传到assets/images
文件夹。 asset pipeline旨在提供您在views
等内使用的图片。
Paperclip
works with S3 out of the box - 实施Upload
模式,您就可以直接将图片上传到S3
。