Active Admin 에서 Tinymce 에디터 구현하기
Active Admin에서 Tinymce 에디터를 구현하고 이미지 업로드 기능까지 완벽하게 설정하는 방법을 자세히 안내해 드립니다.
어드민에서 wysiwyg editor 를 삽입하는 것은 간단하게 구현할 수 있습니다.
먼저 젬을 설치해 줍니다
gem 'tinymce-rails'
gem 'tinymce-rails-imageupload', '~> 4.0.0.beta'
bundle 도 진행 해줍니다
bundle install
이후에 active_admin.js 에 아래와 같이 코드를 추가해줍니다.
//= require tinymce
TinyMCERails.configuration.default = {
selector: "textarea.tinymce",
toolbar: ["styleselect | bold italic | undo redo","link | uploadimage"],
plugins: "link,uploadimage"
};
TinyMCERails.initialize('default', {
relative_urls : false, /// 어드민 페이지에서 가끔 발생하는
remove_script_host : false, /// 상대 url을 해결해주는
convert_urls : true, /// 코드입니다
});
이후에 어드민쪽 페이지에 아래처럼 코드를 추가해줍니다.
f.input :content, input_html: {class: "tinymce"}
이렇게 하면 tinymce 에디터를 띄우는 것에 성공하실 수 있을 겁니다.
하지만 이 상태에서는 이미지 업로드 기능이 정상적으로 작동하지 않을 겁니다.
일단 해당 처리를 해줄 컨트롤러를 만들어줍니다.
rails g controller tinymce_assets
이후에 컨트롤러에서 create액션을 사용할 주소를 만들어줍니다.
post '/tinymce_assets' => 'tinymce_assets#create'
이후에는 tinymce_assets controller 에서
class TinymceAssetsController < ApplicationController
def create
file = params[:file]
uploader = UserImageUploader.new #업로더라는 이름으로 좀업로더 객체 생성
uploader.store!(file)
render json: {
image: {
url: uploader.url
}
}, content_type: "text/html"
end
end
이렇게 하면 이미지를 json 타입으로 에디터에 보내주고 처리해서 바로 띄울 수 있어야 하는데 한가지 오류가 뜰 것 입니다.
model 의 id가 없다는 오류일텐데요 이부분은 uploader 파일에 들어가서 기존의
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
부분의 model.id 부분을 지워주면 됩니다.
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}"
end
이것도 읽어보세요