#ruby-on-rails #ruby #rabl
#ruby-on-rails #ruby #rabl
Вопрос:
Когда я пытаюсь создать узел, подобный:
node 'test' do
'<![CDATA[ <HTML></HTML> ]]>'
end
RABL выводит что-то вроде:
<test>amp;<![CDATA[ amp;<HTMLamp;>amp;</HTMLamp;> ]]amp;></test>
Я бы хотел, чтобы он выводил:
<test><![CDATA[ <HTML></HTML> ]]></test>
Как это сделать?
Комментарии:
1.
<![CDATA[ <HTML></HTML> ]]>
Как RABL узнает, что вы хотите, при написании<HTML></HTML>
(CDATA — это специальный блок) или обычная строка<![CDATA[ <HTML></HTML> ]]>
(CDATA — это часть ответа)? Я думаю, вам не следует (и не нужно) писать блок CDATA самостоятельно. RABL создает API для обмена данными в разных клиентах. API может быть недоступен для чтения человеком, но для программы это нормально. Просто напишите<HTML></HTML>
и позвольте RABL экранировать специальные символы для вас.
Ответ №1:
Средство визуализации XML в Rabl Hash#to_xml
использует внутри ActiveSupport, поэтому вы можете использовать функциональность этой функции для генерации блока CDATA, подобного этому:
node 'test' do
{ '_' => lambda { |x| x[:builder].cdata! '<HTML></HTML>' } }
end
Обратите внимание, что я добавил «одноразовый» ключ, поскольку to_xml
переданный ключ выбрасывается для процедуры. Взгляните на исходный код по ссылке выше; возможно, есть лучший способ справиться с этим.
Rabl отображает приведенный выше блок для меня следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<hash>
<test>
<![CDATA[<HTML></HTML>]]>
</test>
</hash>