ruby-on-rails – Rails Carrierwave:如何链接到文件?
发布时间:2020-12-17 03:49:04 所属栏目:百科 来源:网络整理
导读:我有一个目录,其中包含一个名为file的属性: class Catalog ActiveRecord::Base mount_uploader :file,CatalogUploader 如何创建一个在浏览器中显示该文件的链接? 我试过了 %= link_to "zzzz",catalog.file_url % 但当我点击该链接时,它只是给我一个路由错
我有一个目录,其中包含一个名为file的属性:
class Catalog < ActiveRecord::Base mount_uploader :file,CatalogUploader 如何创建一个在浏览器中显示该文件的链接? 我试过了 <%= link_to "zzzz",catalog.file_url %> 但当我点击该链接时,它只是给我一个路由错误 Routing Error No route matches [GET] "/Users/emai/Documents/mysite/catalogs/2/vegetarian.png" 并且URL看起来也不正确:http:// localhost:3000 / Users / emai / Documents / mysite / catalogs / 2 / vegetarian.png.我知道pic存在,因为我创建了一个下载文件的链接,并且工作正常.但是,我想要显示图片. CatalogUploader: # encoding: utf-8 class CatalogUploader < CarrierWave::Uploader::Base # Include RMagick or MiniMagick support: # include CarrierWave::RMagick # include CarrierWave::MiniMagick # Choose what kind of storage to use for this uploader: storage :file # storage :fog # Override the directory where uploaded files will be stored. # This is a sensible default for uploaders that are meant to be mounted: def store_dir if Rails.env.test? || Rails.env.cucumber? "#{Rails.root}/public/test/file_uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" else "#{Rails.root}/catalogs/#{model.id}" end end # Provide a default URL as a default if there hasn't been a file uploaded: # def default_url # # For Rails 3.1+ asset pipeline compatibility: # # ActionController::Base.helpers.asset_path("fallback/" + [version_name,"default.png"].compact.join('_')) # # "/images/fallback/" + [version_name,"default.png"].compact.join('_') # end # Process files as they are uploaded: # process :scale => [200,300] # # def scale(width,height) # # do something # end # Create different versions of your uploaded files: # version :thumb do # process :scale => [50,50] # end # Add a white list of extensions which are allowed to be uploaded. # For images you might use something like this: # def extension_white_list # %w(jpg jpeg gif png) # end # Override the filename of the uploaded files: # Avoid using model.id or version_name here,see uploader/store.rb for details. # def filename # "something.jpg" if original_filename # end end 解决方法
更新CatalogUploader中的store_dir方法,如下所示:
def store_dir if Rails.env.test? || Rails.env.cucumber? "#{Rails.root}/public/test/file_uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" else "#{Rails.root}/public/catalogs/#{model.id}" ## Should be in public folder end end 图像必须存在于公共文件夹中,以便可以从Web访问它们.如果不是,那么Rails会尝试在routes.rb中找到它的路由. 另外,我认为您需要更改目录模型,如下所示: class Catalog < ActiveRecord::Base mount_uploader :file,CatalogUploader,mount_on: :file 根据文档:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |