Instalando CkEditor no Rails 3
Autor: Leandro Correa dos Santos | Publicado: 2012-07-16T16:11:00-07:00





Comecei a "brincar" com Ruby on Rails 3 graças à influência de um amigo. Desenvolver usando esse framework é algo muito divertido.&nbsp;

Tudo estava indo bem até esbarrar em um problema: Precisava usar um editor html em um campo de texto do meu site (um dos vários que fiz apenas com fins didáticos) e não sabia como implementar um. A tarefa parecia ser mais difícil pelo fato de estar utilizando a gem Rails Admin para criar o painel administrativo do site. Foi então que encontrei no github uma versão do ckeditor para Rails que era compatível com essa gem.

Já conhecia o CkEditor de "outros carnavais", então resolvi seguir os passos do turorial de instalação contido nele. Para minha surpresa, não consegui instalá-lo (sim, achei isso estranho. Em geral, as coisas são bem simples de serem feitas no Rails). Resolvi estudar a documentação um pouco mais a fundo e depois de alguns testes, descobri a melhor forma de instalá-lo.



Nesse exemplo, quero usar o CkEditor no meu módulo Posts, que possui apenas título e conteúdo (onde quero utilizar o editor).



Primeiramente, precisamos modificar o arquivo Gemfile, para adicionar a lista de gems que iremos utilizar no projeto. Basicamente, usei RailsAdmin para o painel, Paperclip para upload de imagens, Therubyracer para javascript e Devise para autenticação. 




No seu Gemfile, adicione as seguintes linhas:



gem 'rails_admin', :git =&gt; 'git://github.com/sferik/rails_admin.git'

gem 'paperclip'&nbsp;

gem 'therubyracer'

gem 'ckeditor'

gem 'devise'



Para instalar todas as gems listadas no Gemfile, execute o comando bundle install:



bundle install



Depois de devidamente instaladas, gere os arquivos necessários ao CkEditor usando o comando abaixo. os parâmetros 'path' e 'backend' são o "pulo do gato" desse passo-a-passo, pois vão configurar o caminho dos scripts e a gem responsável pelo upload dos arquivos respectivamente:



$ rails generate ckeditor:install --path=public/assets --backend=paperclip



Feito isso, é necessário gerar o model do CkEditor (sim, ele possui um model):



$ rails generate ckeditor:models



O CkEditor utiliza o banco de dados para gravar os meta-dados dos arquivos enviados pelo seu sistema de upload. Ele não funcionará sem isso. Crie o arquivo db/migrate/create_ckeditor.rb com o seguinte conteúdo:





class CreateCkeditor &lt; ActiveRecord::Migration

&nbsp; def self.up

&nbsp;&nbsp;&nbsp; create_table :ckeditor_assets do |t|

&nbsp; &nbsp;&nbsp;&nbsp; t.string &nbsp;:data_file_name, :null =&gt; false

&nbsp; &nbsp;&nbsp;&nbsp; t.string &nbsp;:data_content_type

&nbsp; &nbsp; &nbsp; t.integer :data_file_size

&nbsp; &nbsp;&nbsp;

&nbsp; &nbsp; &nbsp; t.integer :assetable_id

&nbsp; &nbsp; &nbsp; t.string &nbsp;:assetable_type, :limit =&gt; 30

&nbsp; &nbsp; &nbsp; t.string &nbsp;:type, :limit =&gt; 30

&nbsp;&nbsp;

&nbsp; &nbsp; &nbsp; # Uncomment it to save images dimensions, if your need it

#  &nbsp; &nbsp; t.integer :width

#  &nbsp; &nbsp; t.integer :height

&nbsp;&nbsp;

&nbsp; &nbsp; &nbsp; t.timestamps

&nbsp;&nbsp;&nbsp; end

&nbsp;&nbsp;

&nbsp; &nbsp; add_index "ckeditor_assets", ["assetable_type", "type", "assetable_id"], :name =&gt; "idx_ckeditor_assetable_type"

add_index "ckeditor_assets", ["assetable_type", "assetable_id"], :name =&gt; "idx_ckeditor_assetable"

&nbsp; end

end



Com esse arquivo, você poderá criar a tabela responsável por gravar os meta-dados que o editor precisa. crie a base de dados usando o rake:



rake db:migrate



Agora, para finalizar (até que enfim), configure o rails_admin para usar o ckeditor, adicionando o conteúdo abaixo no model correspondente:



rails_admin do

&nbsp; RailsAdmin.config do |config|

&nbsp; &nbsp; config.model Post do

&nbsp; &nbsp; &nbsp; create do

&nbsp; &nbsp; &nbsp; &nbsp; field :titulo

&nbsp; &nbsp; &nbsp; &nbsp; field :conteudo do

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ckedior true

&nbsp; &nbsp; &nbsp; &nbsp; end

&nbsp; &nbsp; &nbsp; end

&nbsp; &nbsp; end

&nbsp; end

end


Isso deve ser suficiente. Nesse caso, coloquei esse conteúdo no meu model Post. Assim, toda vez que ele for carregado, irá configurar o campo 'conteudo' para usar o CkEditor.&nbsp; Para mais detalhes, consulte o manual do Rails Admin.