Comecei a "brincar" com Ruby on Rails 3 graças à influência de um amigo. Desenvolver usando esse framework é algo muito divertido.
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 => 'git://github.com/sferik/rails_admin.git'
gem 'paperclip'
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 < ActiveRecord::Migration
def self.up
create_table :ckeditor_assets do |t|
t.string :data_file_name, :null => false
t.string :data_content_type
t.integer :data_file_size
t.integer :assetable_id
t.string :assetable_type, :limit => 30
t.string :type, :limit => 30
# Uncomment it to save images dimensions, if your need it
# t.integer :width
# t.integer :height
t.timestamps
end
add_index "ckeditor_assets", ["assetable_type", "type", "assetable_id"], :name => "idx_ckeditor_assetable_type"
add_index "ckeditor_assets", ["assetable_type", "assetable_id"], :name => "idx_ckeditor_assetable"
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
RailsAdmin.config do |config|
config.model Post do
create do
field :titulo
field :conteudo do
ckedior true
end
end
end
end
end

Olá!
ResponderExcluirVc teve algum problema para por em produção? Eu estou usando só o ckeditor, sem o rails admin. Quando mando para produção o text area não é afetado pelo ckeditor.
Estou fazendo deploy no heroku. No heroku logs não dá nenhum erro.
No console do javascript tenho o seguinte erro:
Uncaught ReferenceError: CKEDITOR is not defined
Mas esse erro aparece em desenv. também, porém funciona normal.
Já li várias sugestões pela net uma delas era subscrever o init.js da gem e colocar um na pasta app/assets/js
Quando fiz isso localmente passei a ter o mesmo comportamento que no servidor. Como o init.js no exemplo que encontrei servia pra definir o CKEDITOR_BASEPATH pensei que talvez tenha alguma coisa a ver com o ruby encontrar o ckeditor.
No meu production.rb tenho a seguinte linha que também foi sugestão em alguma discussão no stackoverflow:
config.assets.precompile += %w( ckeditor/* )
Agradeço qualquer colaboração.
Olá.
ResponderExcluirMesmo usando o rails_admin, passei por um problema parecido. Só consegui fazer o ckeditor funcionar depois de usar esse comando:
$ rails generate ckeditor:install --path=public/assets --backend=paperclip
O parâmetro --path indica onde estão os arquivos js e css usados pelo editor. Sem ele, o ckeditor não consegue encontrá-los e falha.
Não testei isso sem o rails_admin (na verdade, dei uma pausa com o Rails no momento), mas espero que isso ajude...