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
Вроде работает.