使用Rails的atom_feed助手在Atom Feed中呈现HTML内容

3

我遇到了一些使用(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片段吗?

有人能帮帮我吗。

非常感谢 PascalTurbo

2个回答

0

我最近做了这件事,并将我的发现写成了一篇文章,可以在这里看到:http://www.communityguides.eu/articles/14

一个相对简单的版本如下,更多内容请参见链接:

app/views/articles/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

谢谢你的快速回复,但那不是我想要的意思。这种方式,“body”必须包含所有必要的内容。 但对于富HTML内容,需要使用内容呈现部分。我已经在上面的帖子中添加了一个示例。 - PascalTurbo
抱歉,我误解了你的问题。只是猜测,因为我现在无法尝试 - entry.content :type => "text/html" do render .... end 怎么样? - Markus Proske
这会导致出现以下错误信息:ActionView::Template::Error (缺少部分 /galleries/show,使用 {:handlers=>[:erb, :rjs, :builder, :rhtml, :rxml], :formats=>[:atom], :locale=>[:de, :de]}。显然,它试图呈现一些原子内容而不是 HTML 内容。 - PascalTurbo
如果你尝试这样强制渲染:render :partial => '/path/name.html.erb', :locals =>{:var => ... }会发生什么? - Markus Proske
强制使用本地语言被忽略了 :-/ - PascalTurbo
显示剩余2条评论

0

这看起来像是一个旧的 bug。我找到的最好的解决方案是复制带有 .atom.erb 扩展名的 partial。例如:

_inner_slider.html.erb 变成了 _inner_slider.atom.erb

这是因为 Rails 正在寻找特定的格式。

这个解决方案并不是很 DRY,其他替代方案也非常欢迎。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接