【问题标题】:Rails 3.1 Replacement for RXML Template BuilderRails 3.1 替换 RXML 模板生成器
【发布时间】:2012-01-02 14:12:29
【问题描述】:

在 Rails 3.1 中处理自定义 XML 响应的正确方法是什么?

在 Rails 2 中,我的控制器中有以下操作:

# GET the blog as a feed
def feed
  @blog = Blog.find(:first, :id => params[:id]])

  @blog_id = @blog.id
  @blog_posts = BlogPost.find(:all, :conditions => ["blog_id = ? AND is_complete = ?", @blog_id, true], :order => "blog_posts.created_at DESC", :limit => 15)
  render :action => :feed, :layout => false
end

然后是视图中的 RXML 构建器模板,'feed.rxml':

xml.instruct! :xml, :version=>"1.0"
xml.rss(:version=>"2.0") {
xml.channel {
    xml.title(@blog.title)  
    xml.link(url_for(:only_path => false))

    xml.description(@blog.subtitle)  
    xml.language('en-us')  
    for blog_post in @blog_posts
        xml.item do  
            xml.title(blog_post.title || '')  
            xml.link(blog_named_link(blog_post))
            xml.description(blog_post.body)  
            xml.tag(blog_post.tag_string)  
            xml.posted_by(blog_post.posted_by.name)  
        end  
     end  
    }
}

Rails 3.1 已经消除了 RXML 模板处理程序,但我似乎找不到关于我们应该用什么替换它的文档。

【问题讨论】:

    标签: xml ruby-on-rails-3 view


    【解决方案1】:

    首先将respond_to 部分添加到您的操作方法中

    respond_to do |format|
      format.xml
    end
    

    或者只是在控制器类定义中添加respond_to :html, :xml

    然后将模板文件重命名为feed.xml.builder

    【讨论】:

    • 我仍然得到以下信息:缺少模板博客/提要,应用程序/提要与 {:handlers=>[:erb, :builder, :coffee, :prawn, :prawn_dsl, :haml], :格式=>[:html], :locale=>[:en, :en]}。它正在查看包含 feed.xml.builder 的视图文件夹
    • @Andy 哦,我应该告诉 rails 我接受 xml 请求并生成 xml 文件
    • 谢谢,这让我走上了正轨。我在“feed”方法的顶部插入了:request.format = "xml" unless params[:format],因为我只有一个应该默认为 .xml 格式的方法。
    • 如果你只用于xml输出,你可以在你的路由中添加:format => "xml"。
    【解决方案2】:

    ShiningRay 的回答对我来说几乎是 100%,但我还必须强制它不呈现默认布局以使 xml 有效。

    # force this to render as xml - this method *only* does xml
    request.format = "xml" 
    respond_to do |format|
      format.xml {render :layout => false} 
    end
    

    【讨论】:

      猜你喜欢
      • 2015-11-17
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2014-06-26
      • 2011-10-25
      • 2014-07-14
      • 2021-06-05
      • 2012-02-11
      相关资源
      最近更新 更多