Рендеринг HTML-контента в Atom Feed с помощью Rails atom_feed helper

#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 ищет определенный формат.

Это решение совсем не сухое, и другие альтернативы более чем приветствуются.