3

YML ファイルから構築されたアプリケーションに json オブジェクトを返す状況があります。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 }

デフォルトで?

4

3 に答える 3

0

これは現時点では実行できません。私は多くのレールソースを読みましたが、そのメソッドにアクセスする方法がないため、カスタマイズすることはできません。

これをサポートするRailsプラグインを作成し、最終的にはここに投稿しますが、確かに答えは次のとおりです。これは実行できません

于 2012-01-11T20:43:43.110 に答える
0

ジョシュの答えは有効なものですが、解析コードがオブジェクトにまとめられていることを確認したいと思います。そのオブジェクトをアプリ/モデルに配置すると、テスト可能になり、テスト スイートを使用してロジックへの変更をいつでも確認できます。

これのもう 1 つの利点は、format.json 呼び出しを再利用して、コントローラーをはるかに簡単にできることです。

于 2011-12-11T21:06:26.223 に答える
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/

于 2011-12-11T21:01:46.197 に答える