2017-04-10 1 views
0

J'ai un projet dans les rails 4 qui utilise ckeditor avec cloud. Le uplaod à Cloudinary fonctionne très bien, mais après le téléchargement, quand l'éditeur doit moussaillon l'image, je reçois l'erreur:Rails4: CKEditor erreur gsub

NoMethodError - undefined method `gsub' for nil:NilClass: 

enter image description here

Mon CKEditor Image Uploader est:

# encoding: utf-8 
class CkeditorPictureUploader < CarrierWave::Uploader::Base 
    include Ckeditor::Backend::CarrierWave 
    include Cloudinary::CarrierWave 
    include CarrierWave::MiniMagick 



    [:extract_content_type, :set_size, :read_dimensions].each do |method| 
    define_method :"#{method}_with_cloudinary" do 
     send(:"#{method}_without_cloudinary") if self.file.is_a?(CarrierWave::SanitizedFile) 
     {} 
    end 
    alias_method_chain method, :cloudinary 
    end 

    process :read_dimensions 

    # Create different versions of your uploaded files: 
    version :thumb do 
    process :resize_to_fill => [118, 100] 
    end 

    version :content do 
    process :resize_to_limit => [800, 800] 
    end 

    # Add a white list of extensions which are allowed to be uploaded. 
    # For images you might use something like this: 
    def extension_white_list 
    Ckeditor.image_file_types 
    end 
end 

Quand je vais télécharger et cliquez sur "trouver l'image sur le serveur" l'image est là et je peux charger l'image sur l'éditeur, mais pas quand je télécharge l'image sur le serveur

Quelqu'un a eu ce problème avant?

Merci!

Répondre

0

Cette erreur se produit car gsub n'a pas trouvé d'URL pour l'image téléchargée dans ckeditor. Vous devez créer un fichier ckeditor asset_response.rb dans votre dossier lib/ckeditor de votre application et de mettre cette ligne de code

def asset_url(relative_url_root) 
    @ckeditor_assets = Ckeditor::Picture.last.url_content 
    puts @ckeditor_assets.inspect 
    #return nil if asset.url_content.nil? 
    url = @ckeditor_assets #Ckeditor::Utils.escape_single_quotes(asset.url_content) 

    if URI(url).relative? 
    "#{relative_url_root}#{url}" 
    else 
    url 
    end 
end 

mettre tout le code et remplacer la méthode de asset_url avec cela. Ceci est juste un hack pour inclure le modèle Ckeditor::Picture.

Mettre ce code pour cloudinary dans le fichier CkeditorPictureUploader

include Ckeditor::Backend::CarrierWave 
include Cloudinary::CarrierWave 
    process :tags => ["photo_album_sample"] 
    process :convert => "jpg" 
    version :thumbnail do 
    eager 
    resize_to_fit(200, 200) 
    cloudinary_transformation :quality => 80   
    end 
+0

Merci! Il n'y a pas de dossier lib/ckeditor. Je devrais en créer un? –

+0

J'ai juste essayé de créer le fichier: libs/ckeditor/asset_response.rb et de mettre le code là. Mais je git toujours la même erreur. Je ne trouve pas le dossier CKEDITOR de gem dans mon projet, donc je pense que je pourrais créer ce fichier sur le dossier LIB de mon projet? –

+0

Oui, vous devez créer un dossier dans le fichier 'lib' ckeditor/asset_response.rb et vérifier que le dossier ckeditor est présent dans le modèle ou non. –