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'
。请阅读我在原始答案中留下的关于布局和渲染的链接。