【问题标题】:Ruby-on-Rails: Help with render: layout => falseRuby-on-Rails:渲染帮助:layout => false
【发布时间】:2010-12-02 11:48:20
【问题描述】:

我正在尝试从 API 访问 Rails 应用程序资源(它发送应用程序/XML GET 请求),我希望不必解析 XML 文件。

在我的资源控制器中,我有以下内容:

def get_resource
    @my_resource = Resources.new
    render :xml => @my_resource
end

按预期生成一个 xml 文件。如果我将其替换为:

render :layout => false

我的 API 报告“缺少模板”错误。我还尝试了以下方法:

render :xml => @identity, :layout => false

但是页面仍然呈现。解决这个问题的正确方法是什么?

【问题讨论】:

    标签: ruby-on-rails render actionpack


    【解决方案1】:

    当你渲染 :xml 时,它不使用布局,因为它也不使用任何模板。通过指定 :layout => false,你告诉 rails 去寻找一个不存在的模板。

    现在,如果您不想解析 xml 文件,那么您有几个选择。要么:

    render :json => @my_resource
    

    render :text => "My resource name is: #{@my_resource.name}" # Whatever you want
    

    这完全取决于您希望结果的外观,以及您的 API 期望接收的内容。因此,如果您认为这些内容没有任何帮助,请举例说明您希望回复的外观。

    【讨论】:

    • 谢谢,这正是我要找的。​​span>
    • 还有render nothing: true
    【解决方案2】:
    def get_resource
      @my_resource = Resources.new
      respond_to do |wants|
        wants.xml { render :xml => @my_resource }
        wants.html { render :layout => false }
      end
    end
    

    阅读这篇文章:http://tokumine.wordpress.com/2009/09/13/how-does-respond_to-work-in-the-rails-controllers/

    【讨论】: