Rails 3 использует CKEditor с уже существующей моделью скрепки

У меня есть веб-приложение в Rails 3, которое уже имеет модель полиморфной скрепки. Я уже прикрепил несколько моделей к нему.

Вскоре я понял, что мне нужен хороший редактор wysiwyg для текстовой области, я установил гем ckeditor с помощью paperclip, но он генерирует свои собственные модели для ckeditor::pictures и asset.

Есть ли способ переопределить, какую модель камень ищет в ckeditor, чтобы я мог использовать свою существующую модель полиморфного скрепки с ckeditor?

4 ответа

Решение

Я обнаружил, что вы не можете сказать gem ckeditor использовать вашу существующую модель скрепки, что вы должны использовать модели скрепок, которые она генерирует, или не использовать редактор. Затем вам придется бороться с драгоценным камнем, разветвляя его и внося изменения, чтобы использовать вашу текущую и существующую модель скрепки.

Лично я бы рекомендовал не использовать гем ckeditor, если у вас уже есть модель вложений через скрепку или несущую. Просто получите файлы javascript ckeditor со своего веб-сайта и примените редактор таким образом.

Вы можете сделать это, загрузив файлы javascript, поместив их в свой каталог assets/javascript. Затем включите их в ваш application.js

Я знаю, что этот вопрос немного устарел, но теперь есть способ установить модель. В config/initializers/ckeditor.rb имеются config.picture_model а также config.attachment_file_model настройки, которые вы можете использовать для установки моделей.

Используйте этот генератор, предоставляемый самим гемом:

rails generate ckeditor:install --orm=active_record --backend=paperclip

Если вы изменяете модель изображения и модель файла вложения для наследования от базовой модели:

class Ckeditor::Picture < Asset

end

И включите Ckeditor в свой базовый класс:

class Asset < ApplicationRecord
  include Ckeditor::Orm::ActiveRecord::AssetBase
  include Ckeditor::Backend::Paperclip

  belongs_to :attachable, :polymorphic => true

  has_attached_file :data,
    storage: :s3,
    s3_region: S3_CONFIG["region"],
    path: "assets/:attachment/:id/:style.:extension",
    :styles => lambda { |a| a.instance.styles },
    s3_credentials: {
         access_key_id: S3_CONFIG["access_key_id"] ,
         secret_access_key: S3_CONFIG["secret_access_key"]
       },
    s3_protocol: 'http',
    bucket: S3_CONFIG["bucket"]
end

И измените имя таблицы в вашем инициализаторе (ckeditor.rb):

module Ckeditor
  module Orm
    module ActiveRecord
      module AssetBase
        def self.included(base)
          base.send(:include, Base::AssetBase::InstanceMethods)
          base.send(:extend, ClassMethods)
        end
        module ClassMethods
          def self.extended(base)
            base.class_eval do
              self.table_name = 'assets'
            end
          end
        end
      end
    end
  end
end

Вроде работает.

Другие вопросы по тегам