用Paperclip上传多个附件
POSTED AT: 2010-06-22 01:22:38 UTC |
POSTED IN: Ruby/Rails |
5 COMMENTS
在Rails程序里上传文件你会用什么呢?反正我是用的paperclip,至少它支持Ruby1.9和Rails3。哪个2B再抄我的文章甚至是改我的文章天天夜里和猪爱爱白天一直吃猪粮!
这是tutorial,所以你只需要按照步骤来就能完成一个可运行的DEMO。前提是我用的ruby 1.9.2preview3和Rails 3.0.0.beta4,你可以与我不同,不过我不保证会顺利。
我要说的是Post与Asset之间has_many的association,就是一个Post有很多的Asset。如果你只想要has_one的可以直接参看paperclip的快速入门
准备工作
我们需要一个新的Rails项目weblog,然后添加一个Post
gem install paperclip rails weblog cd weblog rails g scaffold post title:string body:text rake db:migrate rails s
好的,访问http://localhost:3000/posts,现在一个简单的blog就完成了。
添加Asset模型
首先在Gemfile里添加一行gem 'paperclip',然后自然是生成一个Model了
rails g model asset data_file_name:string data_content_type:string data_file_size:integer data_updated_at:datetime post_id:integer rake db:migrate
接下来是声明相应的从属关系
# app/models/post.rb class Post < ActiveRecord::Base has_many :assets accepts_nested_attributes_for :assets end # app/models/asset.rb class Asset < ActiveRecord::Base belongs_to :post has_attached_file :data, :url => "/system/:attachment/:id/:style/:filename" end
简单修改Controller
打开PostsController,很SB的这样修改一下new方法,只是DEMO!!!
def new @post = Post.new @post.assets.build @post.assets.build respond_to do |format| format.html # new.html.erb format.xml { render :xml => @post } end end
简单修改View
在_form.html.erb里面添加下面一块内容
<%= f.fields_for :assets do |asset_form| %> <div class="asset field"> <%= asset_form.file_field :data %> </div> <% end %>
哦,由于要上传文件,那自然要这样修改一下_form.html.erb
<%= form_for(@post, :html => { :multipart => true }) do |f| %>
然后在展示页面show.html.erb添加如下内容
<p> <b>Assets:</b> <ul> <% @post.assets.each do |asset| %> <li><%= asset.data.url %></li> <% end %> </ul> </p>
好的,现在可以用了,为保证tutorial的简单明了,很粗糙很粗糙。。。
本文基于 署名-非商业性使用-禁止演绎 2.5 中国大陆 发布
5 COMMENTS >>LEAVE<<
-
是挺粗糙的
-
我是来看第一段,第二句的。
-
asset build两次是哥什么意思
-
hi 收藏你的blog了 这篇给我提示很大(才学rails 然后就push着做项目) 虽然很多地方不懂,但是实现了上传不同的文件到不同的model 而不是一个 assert。希望以后能有交流。