Sử dụng CKEditor Gem
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. 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ở ...
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.
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
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