Ruby on rails Rails 3使用自定义模板响应\u

Ruby on rails Rails 3使用自定义模板响应\u,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我的控制器中有一个最新的操作。此操作仅获取最后一条记录并呈现show模板 class PicturesController < ApplicationController respond_to :html, :json, :xml def latest @picture = Picture.last respond_with @picture, template: 'pictures/show' end end class PicturesControll

我的控制器中有一个
最新的
操作。此操作仅获取最后一条记录并呈现
show
模板

class PicturesController < ApplicationController
  respond_to :html, :json, :xml

  def latest
    @picture = Picture.last

    respond_with @picture, template: 'pictures/show'
  end
end
class PicturesController

是否有更干净的方法提供模板?似乎必须为HTML格式提供
图片/
部分是多余的,因为这是站点控制器。

如果要呈现的模板属于同一个控制器,可以这样编写:

class PicturesController < ApplicationController
  def latest
    @picture = Picture.last

    render :show
  end
end
class PicturesController
不需要更改图片/路径。您可以在这里深入了解:

如果需要保留xml和json格式,可以执行以下操作:

class PicturesController < ApplicationController
  def latest
    @picture = Picture.last

    respond_to do |format|
      format.html {render :show}
      format.json {render json: @picture}
      format.xml {render xml: @picture}
    end

  end
end
class PicturesController
我这样做与@Dario Barrionevo类似,但我需要保留XML和JSON格式,并且对执行
respond\u to
块不满意,因为我正在尝试使用
respond\u与
响应程序。事实证明你能做到

class PicturesController < ApplicationController
  respond_to :html, :json, :xml

  def latest
    @picture = Picture.last

    respond_with(@picture) do |format|
      format.html { render :show }
    end
  end
end
class PicturesController
默认行为将根据JSON和XML的需要运行。您只需要指定一个需要覆盖的行为(HTML响应),而不是全部三个


.

这是正确的答案。值得注意的一点是:调用
render'show'
只渲染show模板,而不调用show操作。因此,如果您的
show
操作中存在show模板需要的实例变量,您还必须在
latest
操作或呈现
show
模板的任何其他操作中设置这些变量。请参阅我的更新。我需要为这个操作保留“API导航”(JSON和XML格式)。我知道我可以给
respond\u一个块,然后执行
format.html{render:show}
。这看起来也不像应该的那么干净。如何为自定义模板而不是已经是rest操作一部分的模板执行此操作?共享文件夹中的自定义模板如何?@gwho您可以使用
render'shared/file\u name'
。请阅读我在原始答案中留下的关于布局和渲染的链接。