paperclip多文件上传
来源:互联网 发布:家用加湿器知乎 编辑:程序博客网 时间:2024/06/05 03:43
在Rails程序里上传文件你会用什么呢?反正我是用的paperclip,至少它支持Ruby1.9和Rails3。
这是tutorial,所以你只需要按照步骤来就能完成一个可运行的DEMO。前提是我用的ruby 1.9.2preview3和Rails 3.0.0.beta4,你可以与我不同,不过我不保证会顺利。
我要说的是Post与Asset之间has_many的association,就是一个Post有很多的Asset。如果你只想要has_one的可以直接参看paperclip的快速入门
准备工作
我们需要一个新的Rails项目weblog,然后添加一个Post
1
gem
install
paperclip
2
rails weblog
3
cd
weblog
4
rails g scaffold post title:string body:text
5
rake db:migrate
6
rails s
好的,访问http://localhost:3000/posts,现在一个简单的blog就完成了。
添加Asset模型
首先在Gemfile里添加一行gem 'paperclip'
,然后自然是生成一个Model了
1
rails g model asset data_file_name:string data_content_type:string data_file_size:integer data_updated_at:datetime post_id:integer
2
rake db:migrate
接下来是声明相应的从属关系
01
# app/models/post.rb
02
class
Post < ActiveRecord::Base
03
has_many
:assets
04
accepts_nested_attributes_for
:assets
05
end
06
07
# app/models/asset.rb
08
class
Asset < ActiveRecord::Base
09
belongs_to
:post
10
has_attached_file
:data
,
:url
=>
"/system/:attachment/:id/:style/:filename"
11
end
简单修改Controller
打开PostsController,很SB的这样修改一下new方法,只是DEMO!!!
01
def
new
02
@post
= Post.
new
03
@post
.assets.build
04
@post
.assets.build
05
06
respond_to
do
|format|
07
format.html
# new.html.erb
08
format.xml { render
:xml
=>
@post
}
09
end
10
end
简单修改View
在_form.html.erb里面添加下面一块内容
1
<%= f.fields_for
:assets
do
|asset_form| %>
2
<div
class
=
"asset field"
>
3
<%= asset_form.file_field
:data
%>
4
</div>
5
<%
end
%>
哦,由于要上传文件,那自然要这样修改一下_form.html.erb
1
<%= form_for(
@post
,
:html
=> {
:multipart
=>
true
})
do
|f| %>
然后在展示页面show.html.erb添加如下内容
1
<
p
>
2
<
b
>Assets:</
b
>
3
<
ul
>
4
<% @post.assets.each do |asset| %>
5
<
li
><%= asset.data.url %></
li
>
6
<% end %>
7
</
ul
>
8
</
p
>
好的,现在可以用了,为保证tutorial的简单明了,很粗糙很粗糙。。。
原文转自:http://abitno.me/has-many-with-paperclip-to-upload-multiple-attachments
app/controllers/posts_controller.rb中post_params改成如下代码。
def post_params
params.require(:post).permit(:title, :body, assets_attributes: [:asset])
end
asset.rb要改为
class Asset < ActiveRecord::Base
belongs_to :post
has_attached_file :data, :default_url => "/images/:style/missing.png"
validates_attachment_content_type :data, :content_type => /\A*\/.*\Z/
end
- paperclip多文件上传
- 文件上传插件paperclip
- rails为paperclip上传文件添加访问控制
- Ruby on Rails邮件Mailer和上传附件paperclip
- Paperclip::NotIdentifiedByImageMagickError
- rails paperclip
- paperclip-qiniu
- RubyOnRails在redactor中通过paperclip实现图片上传并编辑的功能
- 文件上传(多文件)
- asp.net文件上传,多文件上传。
- 单文件上传、多文件上传
- struts2文件上传与多文件上传
- 单文件上传和多文件上传
- PHP文件上传功能 -- 多文件上传
- struts2文件上传(多文件上传)
- SpringMVC文件上传 多文件上传实例
- Struts2之文件上传,多文件上传
- SpringMVC文件上传 多文件上传实例
- linux下抓包命令--tcpdump的使用
- Ubuntu 怎么在右键添加打开终端
- 华为OJ一个题目
- ECC的理解
- solr 自定义函数 评分函数
- paperclip多文件上传
- 设计模式之命令模式
- virtual 语法规则
- WIN7下获取多核CPU【各个】使用率的方法
- Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题
- 如何利用 JConsole观察分析Java程序的运行,进行排错调优
- 快速排序
- TopCoder——Lottery(买彩票问题)
- 在IPhone桌面的应用程序图标右上角显示数字