# Gemfile
gem 'summernote-rails'
gem "refile", require: "refile/rails"
gem "refile-mini_magick"
Generate a new model for your images to be stored. Without Refile (or a similar uploader), the images will be converted to BASE64 and stored within the database.
# bash
rails g model image image_id image_filename image_size:integer image_content_type
# application.js
//= require summernote
# application.css.scss
/*
@import "bootstrap-sprockets";
@import "bootstrap";
*/
@import "summernote";
# _form.html.erb
<%= f.input :summary, as: :summernote %>
<%= f.input :content, as: :summernote %>
# articles.coffee
$ ->
sendFile = (that, file) ->
data = new FormData
data.append 'image[image]', file
$.ajax
data: data
type: 'POST'
url: '/images'
cache: false
contentType: false
processData: false
success: (data) ->
img = document.createElement('IMG')
img.src = data.url
img.setAttribute('id', data.image_id)
$(that).summernote 'insertNode', img
deleteFile = (file_id) ->
$.ajax
type: 'DELETE'
url: "/images/#{file_id}"
cache: false
contentType: false
processData: false
ready = ->
$('[data-provider="summernote"]').each ->
$(this).summernote
height: 200
callbacks:
onImageUpload: (files) ->
img = sendFile(this, files[0])
onMediaDelete: (target, editor, editable) ->
image_id = target[0].id
if !!image_id
deleteFile image_id
target.remove()
$(document).ready(ready)
$(document).on('page:load', ready)
# images_controller.rb
class ImagesController < ApplicationController
protect_from_forgery except: :create
def create
@image = Image.new(image_params)
@image.save
respond_to do |format|
format.json { render :json => { url: Refile.attachment_url(@image, :image), image_id: @image.image_id } }
end
end
def destroy
@image = Image.find_by(image_id: params[:id])
@image.destroy
respond_to do |format|
format.json { render :json => { status: :ok } }
end
end
private
def image_params
params.require(:image).permit(:image)
end
end
# routes.rb
Rails.application.routes.draw do
resources :articles
resources :images, only: [:create, :destroy]
root to: 'articles#index'
end
# image.rb
class Image < ActiveRecord::Base
attachment :image
belongs_to :article
end