gpt4 book ai didi

ruby-on-rails - 在 Ruby on Rails 4 中为 respond_to 和 respond_with 设置自定义格式

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:41 25 4
gpt4 key购买 nike

当我试图让自定义输出与 respond_to/with 一起工作时,我得到了一个 ActionView::MissingTemplate,就像它与 xml/json 输出一样。

我的对象有一个自定义输出格式。

@item.to_custom

我已经使用在 mime_types.rb 中注册的自定义 Mime::Type 注册了格式。

Mime::Type.register "application/custom", :custom

我在我的 Controller 的 respond_to 选项中列出了它

class ItemsController < ApplicationController
respond_to :html, :xml, :custom

然后我在 show Action 结束前有一个 respond_with 方法。

def show
@item = Item.find(params[:id])
respond_with(@item)
end

当我访问 items/1234.xml 时,我得到了 xml 输出。当我尝试访问 items/1234.custom 时,出现错误 ActionView::MissingTemplate。我可以通过添加包含以下内容的文件 app/views/show.custom.ruby 来修复它:

@item.to_custom

有没有办法让 to_custom 在 respond_to/with 设置中像 to_xml 或 to_json 一样工作?只使用 to_custom 方法而不需要模板?还是我必须使用显式调用该方法的 View 模板?

最佳答案

如果您希望它在不显式添加 View 模板的情况下呈现,则需要为您的自定义格式手动添加一个Renderer

Rails 内置格式 xmljson 具有从 Rails 框架内自动添加的渲染器,这就是它们开箱即用和您的自定义格式的原因没有(source code)。

尝试在初始值设定项中或在注册 MIME 类型的正下方添加它

# config/initializers/renderers.rb
ActionController::Renderers.add :foo do |object, options|
self.content_type ||= Mime::FOO
object.respond_to?(:to_foo) ? object.to_foo : object
end

注意:不要使用 custom 作为格式名称,因为它会与 respond_with 内部的方法冲突。

这里有一篇出色的博客文章,深入解释了构建自定义渲染器:http://beerlington.com/blog/2011/07/25/building-a-csv-renderer-in-rails-3/

关于ruby-on-rails - 在 Ruby on Rails 4 中为 respond_to 和 respond_with 设置自定义格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22051946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com