我遇到的情况是我将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
如果我写的话,可以让铁道理解:
def icons
respond_to do |format|
format.extjson
end
end
必须这样做:
format.extjson { render_to_extjson }
默认情况下?
答案 0 :(得分:0)
您可以执行以下操作:
respond_to do |format|
format.html { @foo = Foo.all(:limit => 10) }
format.any(:atom, :rss) { @foo = Foo.all }
end
可以在此处找到更长的帖子进入渲染动作的内容:http://ryanbigg.com/2009/04/how-rails-works-2-mime-types-respond_to/
答案 1 :(得分:0)
虽然Josh的答案是有效的,但我宁愿看到你的解析代码被包装成一个对象。如果您将该对象放入app / models中,它将是可测试的,您可以随时使用测试套件验证对逻辑的任何更改。
另一个好处是你可以重复使用format.json调用,让你的控制器更加简单。
答案 2 :(得分:0)
目前这是不可行的,我读了很多rails源,并且没有办法访问该方法,因此无法自定义它。
我会写一个rails插件来支持这个,最后我会在这里发布,但肯定的答案实际上是:这不能完成。