#ruby-on-rails #feed #atom-feed
#ruby-on-rails #подача #atom-feed
Вопрос:
У меня возникли некоторые проблемы с (довольно недокументированным) помощником atom_feed.
Я бы с удовольствием сделал что-то подобное:
for blogpost in @blogposts
feed.entry(blogpost) do |entry|
entry.title(blogpost.title)
entry.content(render :partial => '...', :object => blogpost), :type => 'html')
end
end
Но, похоже, это не работает, и я понятия не имею, как отобразить HTML вместо некоторого встроенного текста!
Давайте приведем пример:
entry.content (<div style=" ... "> article.body </div> <div style=" ... "> <img src=" article.img.url ..... )
Написание и стилизация контента непосредственно в index.atom.builder действительно раздражает.
Нет ли способа рендерить html-фрагмент в этом контексте?
Может ли кто-нибудь мне помочь.
Спасибо allot PascalTurbo
Ответ №1:
Я сделал это недавно и поместил свои выводы в сообщение, смотрите Здесь: http://www.communityguides.eu/articles/14
Довольно простая версия была бы такой, по ссылке есть еще:
приложение / просмотры/ статьи/index.atom.builder
atom_feed do |feed|
feed.title "Title"
feed.updated @articles.first.created_at
@articles.each do |article|
feed.entry article do |entry|
entry.title article.titl
entry.content article.body, :type => 'html'
entry.author do |author|
author.name article.author
end
end
end
end
Комментарии:
1. Спасибо за быстрый ответ, но это не то, что я имел в виду. Таким образом, «тело» должно содержать все необходимое содержимое. Но для контента с расширенным HTML было бы необходимо рендерить часть содержимого. Я добавил пример к предыдущему сообщению.
2. Извините, я неправильно понял ваш вопрос. Просто дикое предположение, поскольку я не могу попробовать в данный момент — как насчет
entry.content :type => "text/html" do render .... end
?3. В результате появляется следующее сообщение: ActionView::Template::Error (отсутствует частичное отображение / galleries /show с {:handlers=>[:erb, : rjs, :builder, :rhtml, : rxml], :formats=>[:atom], :locale=>[:de, :de]} Очевидно, что он пытается отобразить некоторый atom-контент вместо html-контента.
4. Что произойдет, если вы попытаетесь принудительно выполнить это следующим образом:
render :partial => '/path/name.html.erb', :locals =>{:var => ... }
5. Дополнение: в Rails существует метод render_to_string, который может быть полезен, однако он помечен как устаревший, и я не знаю о замене.
Ответ №2:
Это похоже на старую ошибку. Лучшее решение, которое я нашел, — создать дубликат partial с расширениями .atom.erb. Например.
_inner_slider.html.erb стал _inner_slider.atom.erb
Это связано с тем, что Rails ищет определенный формат.
Это решение совсем не сухое, и другие альтернативы более чем приветствуются.