rails paperclip

来源:互联网 发布:手机淘宝个人主页标签 编辑:程序博客网 时间:2024/06/01 07:31

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"endavatar为前缀名
_from中

<%= form_for @user,:html=>{ :multipart=>true } do|form|%>

     <%= form.file_field:avatar%>

<% end %>

controller层

def create  @user = User.create( user_params )end
privatedef 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

便可删除成功



 





0 0
原创粉丝点击