12/08/2018, 14:05

Tạo bài viết với gem Ckeditor và Paperclip

1. Giới thiệu Rất nhiều website có tính tương tác cao với người dùng bằng các bài viết của họ. Điển hình là các trang diễn đàn, du lịch, review ... Vậy ở bài viết này mình xin giới thiệu đến các bạn 2 gem để hỗ trợ việc tạo bài viết trên website của mình, đó là Ckeditor và Paperclip 2. Sử ...

1. Giới thiệu

Rất nhiều website có tính tương tác cao với người dùng bằng các bài viết của họ. Điển hình là các trang diễn đàn, du lịch, review ... Vậy ở bài viết này mình xin giới thiệu đến các bạn 2 gem để hỗ trợ việc tạo bài viết trên website của mình, đó là Ckeditor và Paperclip

2. Sử dụng gem ckeditor

CKeditor là một gem được sử dụng để tạo ra các form text soạn thảo văn bản, hỗ trợ gần như đầy đủ chức năng để tạo ra 1 bài viết đẹp mắt, chuyên nghiệp.

Đầu tiên, thêm gem ckeditor trong Gemfile:

gem "ckeditor"

Tiếp theo bundle install để cài đặt gem.

Bây giờ tạo một model: ví dụ Article:

rails g resource Article title body:text
rake db:migrate

Khai báo đường dẫn trong routes:

root to: "articles#index"

Thêm vào application.js như sau:

...
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require ckeditor/init
//= require_tree .
...

Ở trong controller:

app/controllers/articles_controller.rb:

class ArticlesController < ApplicationController
  def index
    @articles = Article.order("created_at DESC")
  end

  def show
    @article = Article.find(params[:id])
  end

  def new
    @article = Article.new
  end

  def create
    @article = Article.new(article_params)
    if @article.save
      redirect_to articles_path, notice: "The article has been successfully created."
    else
      render action: "new"
    end
  end

  def edit
    @article = Article.find(params[:id])
  end

  def update
    @article = Article.find(params[:id])
    if @article.update_attributes(article_params)
      redirect_to articles_path, notice: "The article has been           successfully updated."
    else
      render action: "edit"
    end
  end

  private
  def article_params
    params.require(:article).permit(:title, :body)
  end
end

Đến view, đầu tiên là index:

app/views/articles/index.html.erb

<%= link_to "New Article", new_article_path %>
<% @articles.each do |article| %>
  <h3><%= article.title.html_safe %></h3>
  <p><%= article.body.html_safe %></p>
  <%= link_to "Edit Article", edit_article_path(article) %>
  <% if article != @articles.last %>
  <% end %>
<% end %>

Tạo 1 partial để chứa form:

app/views/articles/_form.html.erb:

<% if @article.errors.any? %>
  <ul>
    <%= @article.errors.full_messages.each do |message| %>
        <li><%= message %></li>
    <% end %>
  </ul>
<% end %>
<%= form_for @article 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 đến new.html.erb:

app/views/articles/new.html.erb

<h3> New Article</h3>
<%= render "form" %>

Ở edit view:

app/views/articles/edit.html.erb

<%= "Editing #{@article.title}" %>
<%= render "form" %>

Kết qủa ta được 1 form editor trông như sau:

Screenshot from 2016-10-26 22:50:20.png

3. Chèn ảnh với Paperclip

Để chèn ảnh vào bài viết mình sử dụng gem Paperclip:

Gemfile:

  gem "paperclip"

Terminal:

  bundle install

Tiếp theo chúng ra cần chạy 1 generator cung cấp bởi ckeditor. Nó sẽ tạo ra các models cần thiết sử dụng để lưu trữ ảnh.

Terminal:

  rails generate ckeditor:install --orm=active_record --backend=paperclip
  rake db:migrate

Cuối cùng, restart lại server, trong form editor, bấm vào thêm ảnh để upload ảnh lên và tùy chọn size.

Chúc các bạn thành công!

Tham khảo: https://github.com/galetahub/ckeditor

0