Мне нравится ХАМЛ . Фактически, настолько, что в моем первом приложении на Rails, которое является обычным блогом / CMS, я хочу визуализировать тело модели моей страницы, используя HAML (очевидно, я не буду делать то же самое для комментариев!). Так вот app/views/pages/_body.html.haml
:
.entry-content= Haml::Engine.new(body, :format => :html5).render(self)
... и это работает (уу, рекурсия). То, что я хотел бы сделать, это проверить HAML в теле при создании или обновлении страницы . Я почти могу это сделать, но я застрял в аргументе scope
на render
. У меня есть это в app/models/page.rb
:
validates_each :body do |record, attr, value|
begin
Haml::Engine.new(value, :format => :html5).render(record)
rescue Exception => e
record.errors.add attr, "line #{(e.respond_to? :line) && e.line || 'unknown'}: #{e.message}"
end
end
Вы можете видеть, что я передаю record
, что является Page
, но даже у него нет контроллера, и, в частности, нет таких помощников, как link_to
, так что, как только Страница использует все, что она не сможет проверить, даже если она будет отображаться очень хорошо.
Так что, мне кажется, мне нужен контроллер , чтобы увидеть его в качестве области действия, но доступ к нему отсюда в модели (где находится валидатор) - это большой MVC-нет-нет, и поэтому я не Я думаю, что Rails дает мне способ сделать это. (Я имею в виду, я полагаю, что я мог бы спрятать контроллер в каком-то синглтоне где-нибудь или что-то, но ... извините меня, когда меня вырвет.)
Какой самый уродливый способ правильно проверить HAML в валидаторе ActiveRecord?