我有一种情况,我将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

它会自动搜索内部的意见/目录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 }

默认?

===============>>#1 票数: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/

===============>>#2 票数:0

虽然Josh的答案是有效的,但我宁愿看到你的解析代码被包装成一个对象。 如果将该对象放入app / models中,它将是可测试的,您可以随时使用测试套件验证对逻辑的任何更改。

另一个好处是你可以重复使用format.json调用,让你的控制器更简单。

===============>>#3 票数:0 已采纳

目前这是不可行的,我读了很多rails源,并且没有办法访问该方法,因此无法自定义它。

我会写一个rails插件来支持这个,最后我会在这里发布,但肯定答案实际上是: 这不可能

  ask by Fire-Dragon-DoL translate from so

未解决问题?本站智能推荐:

1回复

在`respond_to'格式语句中,`:location => ...`和`head:ok`是什么意思?

我正在使用Ruby on Rails 3,我想知道:location => ...和head :ok语句在下面的代码中是什么意思,它们如何工作以及如何使用它们。
1回复

为什么没有调用正确的“ respond_to”格式?

我有一个奇怪的问题。 实在太奇怪了,无法输入,但是这里。 基本上,我有一个控制器会拒绝使用javascript进行“ respond_to”,除非我将“ chart.generate_xml”分配给“ respond_to”块之前的变量,如下所示: 如果删除上部的“ @ xml =…
1回复

发布时,控制器更改变量的格式

我是ROR的新手,但很快就流行起来。 我已经在这个问题上工作了两个小时,这似乎是一个错误。 我没有任何意义。 我有一个具有以下迁移的数据库: 我已经验证了根据此迁移在数据库中创建的内容也是整数,字符串等。 通过脚手架生成控制器后,我还没有触摸过控制器,即它是带有show,
1回复

使用原型,是否可能“ redirect_to”避免处理完整的“ js.rjs”代码?

在* user_controller.rb *文件中,我有以下代码: 在update.js.rjs文件中,我有此代码 这是一种通过传递变量(@yo == true)重定向Java响应的技巧。 但是我认为最好在花括号中执行“ redirect_to”之类的操作,以避免处理upda
2回复

如何从rails中的respond_to方法生成json?

如果我有这样的代码块: 我该如何添加类似的内容 任何提示,指示,想法都欢迎...
2回复

在Rails中干燥response_to代码

我有几个动作(我们称它们为action_a,action_b等) 在每个操作中,我要检查用户是否已登录以及是否不具有respond_to块,如下所示 对于一个动作来说这是很好的,但对于许多动作来说却不是,因为此代码将有许多重复的动作可以做完全相同的事情,因此它不是很漂亮或无法维护
1回复

在response_to上出现Rails错误[关闭]

我已经创建了一个用于学习Rails的简单用户身份验证: 如果我创建了一个新用户,但没有阻止response_to和format.html,那么它们都可以正常工作(在数据库中,我有创建的用户,页面已重定向)。 使用此代码,创建了用户,但是我遇到以下错误(并且我没有重定向): PS
2回复

如何判断控制器已解析为呈现的格式

在使用以下代码的rails控制器操作中: 如何记录控制器将解析的格式,即“HTML”或“json”? format的类型为Collector 。 有没有办法获得表示格式的字符串?
3回复

Rails respond_with - 为什么POST返回URL而不是数据?

这是一个问题“为什么这样做”,而不是“我如何使这项工作”。 我的应用程序正在调用返回JSON的第三方REST API,并将结果作为我自己的 JSON API的一部分返回。 我正在使用Rails 3 respond_to和respond_with方法; 在GET请求的情况下,这正如我
2回复

Django相当于rails respond_to

在Rails中,我可以使用respond_to来定义控制器如何根据请求格式进行响应。 在routes.rb中 在profile_controller.rb中 目前,在Django中,我必须使用两个URL和两个动作:一个返回html,一个返回json。 url.py: