2015-11-24 3 views
0

Я пишу простую CMS в Rails 4. И я сохраняю свои статьи в базе данных в виде текстовых строк, содержащих HTML-код (необязательно).Есть ли способ проверить правильность текстовой строки HTML в Rails?

Во всяком случае, мне нужен метод проверки перед сохранением, если текст статьи действителен как HTML, так и (с учетом того, что статья не является полным HTML-документом, а его частью, без DOCTYPE и прочего). Что-то вроде этого: https://validator.w3.org/#validate_by_input+with_options («Проверяйте фрагмент HTML»), но работая в моем приложении Rails как метод проверки модели, поэтому, если моя разметка неверна, она не должна сохранять статью и показывать сообщение об ошибке.

Есть ли драгоценный камень или другой способ для этого?

+0

Возможно, вам стоит подумать об использовании уценки для контента ... если это соответствует вашим потребностям (базовая разметка, изображения и т. Д.). Это довольно просто реализовать, и есть несколько хороших библиотек javascript, которые предоставляют интерфейс. Таким образом, вам не нужно беспокоиться о действительном HTML. –

+0

(этот сайт также использует его) –

ответ

0

Итак, я понял, как достичь этого, используя драгоценный камень w3c_validators.

  1. Добавить gem 'w3c_validators' в Gemfile и запустите bundle install.
  2. Измените модель. Я добавил метод пользовательской проверки для проверки HTML, например:

    class Article < ActiveRecord::Base 
        validate :valid_html 
    
        def valid_html 
         @validator = MarkupValidator.new 
    
         html = "<!DOCTYPE html><html><head><title>title</title></head><body>#{text}</body></html>" 
    
         results = @validator.validate_text(html) 
    
         if results.errors.length > 0 
         results.errors.each do |err| 
          errors.add(:text, err.to_s) 
         end 
         end 
        end 
        end 
    

(мне нужно, чтобы обернуть свой код в HTML и BODY теги и добавить еще несколько тегов, потому что я не хранить полный HTML в моей БД, только частичные).

0

Если вы хотите, чтобы проверить вход для поля в рельсах, вы можете просто использовать 3 вещи, которые

  1. Rails before_save обратного вызова
  2. JS/Ajax для проверки ввода (избежать перезагрузки страницы)
  3. Ограничения, в которых вы определяете действительность. HTML

В вашей модели вы можете создать метод, в котором будут проверяться, действительно ли текст, вставленный в поле. Перед сохранением формы будет проверяться, соответствует ли вставленный html вашему определению действительного html.

Надеюсь, что это помогает.