【发布时间】:2011-12-11 18:37:44
【问题描述】:
我有一种情况,我将 json 对象返回到我的应用程序,这些对象是从 YML 文件构建的。因为要解析 yml 文件并将其作为 json 返回,我总是必须这样做:
format.json { render json: YAML.load(render_to_string :file => File.join(Rails.root,'app','views','home','icons.yml.erb'), :layout => false ) }
我想通过创建自定义格式(但是)生成 json 来缩短此操作,因此我不想创建新的 mime 类型。
我的想法是写:
format.myformat
它会在views/mycontroller目录中自动搜索myaction.myformat.erb,并自动解析yaml文件,将其作为json对象返回。
这可能吗?如果是,我最终该怎么做?
编辑 1: 我在 config/mime_types.rb 中找到了一个重要的建议:
Mime::Type.register_alias "text/html", :iphone
所以我可以为 mime 类型设置别名,现在最大的问题是:如何定义给定格式的默认渲染操作,就像 format.html 那样?
如果我写
format.html
current_action.html.erb 会自动渲染,如何选择正确的方法渲染自定义格式?
编辑 2:
我设法创建了这段代码(在控制器内部,通过我构建的一些辅助方法):
def icons
respond_to do |format|
format.extjson { render_to_extjson }
end
end
如果我写的话,是否可以让 Rails 明白:
def icons
respond_to do |format|
format.extjson
end
end
必须这样做:
format.extjson { render_to_extjson }
默认?
【问题讨论】:
-
你真的尝试过按照你在Edit2中所说的去做吗?如果你这样做了,你得到了什么错误?
-
它只是通过评估所有 erb 事物来呈现它,并将文档作为字符串返回,而不像 render_to_extjson 那样进行 YAML 解析。
-
你考虑过使用 Rails 3 自定义响应器吗?查看asciicasts.com/episodes/224-controllers-in-rails-3的最底部
-
我喜欢这个建议,但仍然没有按照我的要求去做。我正在考虑为渲染方法设置别名并在其中注入一些自定义代码。
标签: ruby-on-rails ruby-on-rails-3 json format respond-to