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

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