1、安装gem "paperclip"
2、上传图片。需要在计算机上安装ImageMagick软件,该软件可识别各种格式的图片,并可以裁剪图片,如果上传的是文件,则不需要安装
在存放图片的表中添加字段,前缀可自己定义。我们使用的前缀是avatar
<attachment>_file_name
<attachment>_file_size
<attachment>_content_type
<attachment>_updated_at
如果你的表已经设计好,但是没有这些字段,可通过 rails generate paperclip user avatar生成,user是你的model名,avatar是字段前缀名,
此时会生成一个
class AddAvatarColumnsToUsers < ActiveRecord::Migration
def self.up
add_attachment :users, :avatar
end
def self.down
remove_attachment :users, :avatar
end
end
这样的文件,运行该文件,这四个字段会自动添加到数据库中model中
class User < ActiveRecord::Base has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png" end avatar为前缀名_from中
<%= form_for @user,:html=> { :multipart=> true } do|form|%>
<%= form.file_field:avatar%>
<% end %>
controller层
def create @user = User.create( user_params ) end
private def user_params params.require(:user).permit(:avatar) end显示的view 中
<%= image_tag @user.avatar.url %>
一对多级联保存图片
首先建立两个表
案例:部门与图片是一对多的关系。即一个部门记录可包含多个图片,图片的保存完全由部门控制。意思是添加部门时为部门上传多张图片,但是图片保存在图片的表中
model中
class Department < ActiveRecord::Base has_many :pictures
accepts_nested_attributes_for :pictures
end
class Picture < ActiveRecord::Base belongs_to :department,class_name: 'Department' has_attached_file :data, :styles => {:small => 'x100', :large => '100x100>'}, :default_url => "/images/:style/missing.png" end
controller中:
def department_params
params.require(:department).permit(:name, :no, :parent_id, :description,pictures_attributes: [:data])
end
view中添加
<%= f.simple_fields_for :pictures do |pictures_form|%>
<%= pictures_form.file_field :data %>
<% end %>
<%= simple_form_for(@department,:html => { :multipart => true,class:'form-horizontal' }) do |f| %>即可
对上传到的多张附件进行级联删除,即删除department记录时也删除掉和它关联的所有picture
其实很简单,只需要在model中添加一句
has_many :pictures,dependent: :delete_all
便可删除成功