rails paperclip

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

便可刪除成功



 








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章