Sử dụng CKEditor Gem
Bài đăng này đã không được cập nhật trong 7 năm
Setup
Bước đầu tiên là cần thêm gem CKEditor vào Gemfile như bên dưới
# Gemfile
gem "ckeditor"
Sau đó đương nhiên phải chạy bundle install
trong terminal để cài đặt gem.
Usage
Bước tiếp theo, sau khi đã cài đặt thành công, ta xây dưng một ứng dụng demo cực kỳ đơn giản để sử dụng CKeditor. Mở terminal tạo model và chạy rake db:migrate
như bên dưới:
rails g resource Magazine title body:text
rake db:migrate
Kế tiếp, ta cần định nghĩa routes cho ứng dụng của mình. Mở file routes.rb và thêm các dòng sau:
# config/routes.rb
root to: "magazines#index"
resources :mail_magazines
Tiếp theo, ta include thư viện javascript mà gem cung cấp sẵn vào app/assets/javascripts/application.js của ứng dụng:
// application.js
...
//= require jquery
//= require jquery_ujs
//= require ckeditor/init
//= require turbolinks
//= require_tree .
Đến đây, mọi việc cài đặt để sử dụng CKEditor trong ứng dụng đã hoàn tất. Phần sau, ta sẽ tiến hành tạo controller để thực hiện các action CRU như sau:
# mail_magazines_controller.rb
class MagazinesController < ApplicationController
def index
@magazines = Magazine.order("created_at DESC")
end
def show
@magazine = Magazine.find(params[:id])
end
def new
@magazine = Magazine.new
end
def create
@magazine = Magazine.new(magazine_params)
if @magazine.save
redirect_to magazines_path, notice: "The magazines has been successfully created."
else
render :new
end
end
def edit
@magazine = Magazine.find(params[:id])
end
def update
@magazine = Magazine.find(params[:id])
if @magazine.update(magazine_params)
redirect_to magazines_path, notice: "The magazine has been successfully updated."
else
render :edit
end
end
private
def magazine_params
params.require(:magazine).permit(:title, :body)
end
end
Sau đó, tiếp đến ta tạo views cho trang index. Trong file app/views/magazines/index.html.erb được sửa như sau:
<%= link_to "New Magazine", new_magazine_path %>
<% @magazines.each do |magazine| %>
<h3><%= magazine.title.html_safe %></h3>
<p><%= magazine.body.html_safe %></p>
<%= link_to "Edit Magazine", edit_magazine_path(magazine) %>
<% if magazine != @magazines.last %>
<hr />
<% end %>
<% end %>
Bước tiếp theo là tạo một partial để làm form create và update magazines. Tạo file app/views/_form.html.erb như bên dưới
<% if @magazine.errors.any? %>
<ul>
<%= @magazine.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
<%= form_for @magazine do |f| %>
<div>
<%= f.label :title %>
</div>
<div>
<%= f.text_field :title %>
</div>
<div>
<%= f.label :body %>
</div>
<div>
<%= f.cktext_area :body, rows: 10 %>
</div>
<div>
<%= f.submit %>
</div>
<% end %>
Tiếp theo tạo views cho trang new. Trong file app/views/magazines/new.html.erb thực hiện như sau:
<h3> New Magazine</h3>
<%= render "form" %>
Cuối cùng tạo views cho trang edit. Trong file app/views/magazines/edit.html.erb thực hiện như sau:
<%= "Editing #{@magazine.title}" %>
<%= render "form" %>
Bây giờ khi vào các trang new và edit magazie ta đã có thể nhập content bằng CKEditor
Images Using Carrierwave
Mục tiêu của phần này là xử lý việc upload ảnh bằng CKEditor và lưu và trong database bằng Carrierwave. Đầu tiên cần cài đặt gem Carrierwave:
gem 'carrierwave'
gem 'mini_magick'
Không quên chạy bundle install
Sau khi đã cài đặt gem cần thiết xong, vì gem CKEditor đã cung cấp sẵn các genarator để tạo các model cần thiết để lưu trữ ảnh nên bây giờ ta chỉ cần chạy lện sau là đã có thể upload và lưu trữ ảnh bằng CKEditor:
rails generate ckeditor:install --orm=active_record --backend=carrierwave
rake db:migrate
Bây giờ khi vào trang edit và new ta đã có thể sử dụng được chức năng upload ảnh của CKEditor.
Kết luận
Trên đây là một ví dụ đơn giản về cách sử dụng CKEditor cơ bản trong một ứng dụng Rails. Để tuỳ biến editor theo yêu cầu thì bạn có thể đọc thêm tại:
Cảm ơn đã theo dõi bài viết!
All rights reserved