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
便可刪除成功