……崩溃,找了很久的资料,最后找到一份template才解决问题。
carrierwave是一个rails 上传文件的 gem,然而用不来……
作者在 github 上的文档真的很没有条理性
前言
偶然间看到这篇文章,希望读者也可以多思考一下。
现在框架发展这么迅速,各种api泛滥,我们在寻求解决一个问题的时候,往往会有点急功近利。如果你考虑了底层实现,那你才是真正学到了东西,并能广泛运用它。否则,你顶多只是积累了当前框架或者api的使用经验。换了一个框架你就完全不会了。
但我的确是看完了这篇文章,我也的确去思考了,但是还是不会用!!!
因为网上很多文章和博客都忽略了一个非常重要的地方,下面我会说明。
这里详细介绍一下 carrierwave 的用法,并假设你已经开了上面那篇文章并思考过了。
安装
首先是安装,在gemfile中输入 gem 'carrierwave', '~> 1.0'
并执行 bundle install
carrierwave 实际建立的是 model ,但这里便于区分并且生成的类同时也是 uploader ,输入命令
rails generate uploader Image
这里的 Image 是由你自己取名的 uploader ,输完后就会生成一个 ruby文件,关于文件上传的一些设置一般都是在这个文件中。
app/uploaders/image_uploader.rb
View
根据MVC,我们先写 views ,一般是在某个目录下的 new.html.erb
中
<%= form_for @comic, :url => comics_path,:html => {:multipart => true} do |t|%>
# 其他代码
<br><%= t.label :image, '漫画封面' %></br>
<%= t.file_field :image %>
<%= t.hidden_field :image_cache %>
# 其他代码
<% end %>
这里一定一定一定要注意, :html => { :multipart => true }
这个hash一定要加!!!只有加了这个才能上传文件,别问我什么意思,什么道理,我不知道……
Controller
然后是controller,一般为 某个目录下的 create
函数
其实在controller只要和平常一样操作即可,这里还是放上我写的吧
def create
@comic = Comic.new(comic_params)
if @comic.save
# 其他代码
else
# 其他代码
end
end
Uploader 的 其他配置
太复杂的高级用法我就不说了,更何况我自己也不会
在预生成的 *_uploader.rb
文件中, 你可以通过重载若干函数来实现你的自定义
store_dir
非重载函数,意思为上传目录,上传目录的相对路径根目录在 public
,路径问题上你可以自己设置
extension_whitelist
重载函数,意思为上传文件白名单,默认为所有文件
filename
重载函数,用途为更改文件名,默认和 变量 original_name
相同
default_url
重载函数,虽然没用过,但是看文档还是看懂了,意为默认文件,如果你没有上传任意文件,就将你设置的 default_url
传给你 new 的对象
其他就不是很清楚了。
图片的使用
因为在我的课设中只会上传图片,这里说一下上传图片的使用
因为新增加的类是 uploader ,它实质上有很多属性,比如,filename, original_name, store_dir, url 等等
,而我们显示图片其实只需要一个 url 即可。
在 View 中输入
<%= image_tag comic.image_url %>
就可以显示当前 comic 的 image