`

ruby使用carrierwave上传附件

    博客分类:
  • RUBY
 
阅读更多
使用carrierwave插件保存附件:
创建attachments多态表来实现附件的存储关联。
gem 'carrierwave'


migration
class CreateAttachments < ActiveRecord::Migration[5.0]
  def change
    create_table :attachments do |t|
      t.string :attachment_entity_type, limit: 64
      t.integer :attachment_entity_id
      t.string :path, comment: '文件类容'
      t.string :name, comment: '文件名'
      t.string :content_type, comment: '文件类型'
      t.integer :file_size, comment: '文件大小'
      t.integer :created_by, comment: '上传人'
      t.timestamps
    end
  end
end

create_table "blogs", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
    t.string "title"
    t.text "content"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "cover_img", comment: "封面"
    t.integer "category_id", comment: "类型"
    t.integer "view_count", comment: "文章访问次数"
    t.integer "seq", default: 10, comment: "顺序"
end


model
class Attachment < ApplicationRecord
  #定义多态
  belongs_to :attachment_entity, polymorphic: true, optional: true
  #继承CarrierWave方法
  mount_uploader :path,  AttachmentUploader
  before_save :set_fields

  def set_fields
    self.content_type = path.content_type
    self.file_size = path.size
    self.name = path.get_original_filename
  end

  def delete_company_attachment_it
    self.destroy
    true
  end

  def attachment_path
    path.url
  end

end


class Blog < ApplicationRecord
  # 关联多态
  has_many :attachments, as: :attachment_entity
  belongs_to :category, optional: true
  has_many :comments

	def user_name
      "@#{self.title}"
	end

	def self.view_count_top
      order(view_count: :desc).limit(5)
	end

	def cover_img_path
  	  self.cover_img ? Attachment.find(self.cover_img.to_i).path.url : "/assets/f10.jpg"
  end

end



AttachmentUploader
class AttachmentUploader < CarrierWave::Uploader::Base
   def store_dir
    "uploads/#{model.attachment_entity_type.to_s.underscore}/#{mounted_as}/#{model.id}"
  end
end


controller
def create
    @blog = Blog.new(blog_params)
    attachment = Attachment.create(attachment_entity_type: "Blog",attachment_entity_id: @blog.id , path: params[:draft_img], created_by: 1 ) 
     @blog.cover_img = attachment.id
     @blog.save
end


view
<%= form_for @blog, url: url, method: meth, :html => { :multipart => true } do |f| %>
  <div class="field">
    <%= file_field_tag "draft_img", id: 'draft_img' %>
    <%= f.text_field :title, class: 'form-control input-sm', style: 'width: 280px;' %>
    <%= text_area_tag 'blog[content]', @blog.content %>
  </div>
  <%= f.submit :class=>"ui primary button"%>
<% end %>
0
0
分享到:
评论

相关推荐

    ruby利用pop3下载附件

    ruby利用pop3下载附件

    carrierwave-aliyun, 阿里云 OSS Ruby 上传组件,基于 Carrierwave.zip

    carrierwave-aliyun, 阿里云 OSS Ruby 上传组件,基于 Carrierwave

    使用ruby解析awdb离线库

    使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库使用ruby解析awdb离线库...

    阿里云_OSS_Ruby_上传组件,基于_Carrierwave_carrierwave-aliyun.zip

    阿里云_OSS_Ruby_上传组件,基于_Carrierwave_carrierwave-aliyun

    Ruby-CarrierWaveRubyWeb框架更优雅的解决方案文件上传

    Ruby-CarrierWave 是一个流行的文件上传库,专为Ruby Web框架如Rails和Sinatra设计,旨在提供一种更优雅、更灵活的方式来处理文件上传。它弥补了Ruby标准库在处理文件上传时的不足,提供了丰富的功能和易于定制的...

    Ruby-qtbindings允许你在Ruby中使用QTGui工具包

    在Ruby中使用QTGui工具包,开发者可以利用Ruby的简洁语法和动态特性,同时享受到QT提供的强大GUI设计能力。通过qtbindings,Ruby程序员可以直接调用QT的类和方法,创建复杂的窗口应用、控件、布局和信号与槽机制,而...

    ruby使用json库

    JSON库在Ruby中的使用主要包括两个主要功能:解析(parsing)和生成(generation)。解析是指将JSON格式的字符串转换为Ruby对象,而生成则是将Ruby对象转换为JSON格式的字符串。 1. **解析JSON**: 在Ruby中,可以...

    ruby收取附件的一些资料搜集

    在Ruby编程语言中,处理邮件和附件是一项常见的任务,特别是在构建Web应用或自动化脚本时。"ruby收取附件"这个标签表明我们关注的是如何在Ruby环境中接收和处理电子邮件中的附件。下面将详细介绍Ruby中处理邮件附件...

    ruby上传文件

    1. **Ruby on Rails框架**:Ruby上传文件通常是在Ruby on Rails框架下进行的,这是一个用于快速开发Web应用的全栈框架,它遵循MVC(模型-视图-控制器)架构模式。 2. **Controller**:在Rails中,控制器负责处理...

    rails_carrierwave_webp_example:使用CarrierWave和WebP-ffi(libwebp包装器)将图像转换为WebP格式的简单示例

    这是一个简单的Rails应用程序,显示了如何使用CarrierWave和WebP-ffi(用Ruby编写的libwebp包装器)将图像转换为WebP格式。 笔记 如果需要在不使用CarrierWave版本的情况下转换图像,则可以使用相同的方法而无需重写...

    ruby初始使用过程总结

    在Ruby的世界里,初学者可能会感到有些陌生,但掌握其基本使用流程将为你的编程旅程打下坚实的基础。本文将详细解析"ruby初始使用过程",帮助你快速上手。 首先,我们需要设置好开发环境。在Windows系统中,通常会...

    shrine, ruby 应用程序的文件附件工具包.zip

    shrine, ruby 应用程序的文件附件工具包 神殿Shrine是 ruby 应用程序中文件附件的工具包。如果你不确定为什么要小心,那么鼓励你阅读的动机,创建神殿的Shrine 。资源文档:shrinerb.com源:github....

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby Ruby Ruby Ruby Ruby Ruby

    Ruby-rubybuild编译和安装Ruby

    在Ruby开发中,为了管理不同版本的Ruby环境,我们常常会使用到`rbenv`和`ruby-build`这两个工具。本文将详细介绍如何使用`ruby-build`来编译和安装Ruby。 `rbenv`是一个用于管理全局或用户级别的Ruby版本的工具,它...

    ruby的pop3、SMTP类库说明

    Ruby中的POP3和SMTP类库是用来处理电子邮件收发的核心工具,它们允许开发者通过编程的方式与邮件服务器进行交互。本文将详细介绍这两个类库的功能和使用方法。 首先,POP3(Post Office Protocol version 3)是一种...

    ruby插件.rar

    对于文件操作,`paperclip` 和 `carrierwave` 是常见的文件上传插件,它们方便地处理图片和其他文件的上传和存储。另外,`active_storage` 是 Rails 5.2 引入的内置文件处理系统,与 AWS S3 或其他云存储服务集成,...

    Ruby-LazyHighCharts一个简单和非常灵活的方式从ruby代码使用HighCharts

    总的来说,Ruby-LazyHighCharts为Ruby开发者提供了一个强大且易于使用的工具,使他们能够便捷地将HighCharts的功能整合到自己的应用中,无论是在动态的Web应用还是静态的站点中,都能实现高效的数据可视化。...

    Ruby新手学习书(Ruby语言中文教程)和Rails_4_days

    Ruby是一种面向对象的编程语言,以其简洁、优雅的语法著称,被广泛应用于Web开发,尤其是与Ruby on Rails框架结合使用。"Ruby新手学习书"和"Rails_4_days"这两个资源是为初学者设计的,旨在帮助他们快速掌握Ruby语言...

    Ruby-PaperClipActiveRecord的简单文件附件管理

    Ruby-PaperClip与ActiveRecord的集成为在Rails应用中实现简单的文件附件管理提供了一种方便的方法。PaperClip是由Thoughtbot开发的一个Ruby库,它允许开发者将文件上传功能轻松地添加到ActiveRecord模型中。让我们...

    Ruby-上传图片到七牛云的简单demo

    本示例是一个简单的Ruby程序,演示了如何使用七牛云的API来上传图片。 首先,你需要在七牛云官网上注册账号并创建一个存储空间(Bucket),这是存放你上传文件的地方。存储空间具有唯一的名称,可以根据项目需求来...

Global site tag (gtag.js) - Google Analytics