0

私の Rails アプリケーションには json API があります。この API を操作すると、エラーが返される場合があります。私は現在、次のようなものを使用しています:

respond_with({:success=>false, :message=>"error_message"}, :status=>400, :location=>nil)

コントローラーで

これをもっと素敵にしたい。したがって、エラー クラスとそのビューを作成することにしたので、コントローラーで次のようなことができます。

error.new({message=>"my message", :status =>400})

render error

私の質問はです。ApiErrorこのクラスはどこに配置すればよいですか?

APIのコントローラーの一種のヘルパーであるため、モデルフォルダーに配置するのは好きではありません。一般的なアプリケーション モデルではありません。

4

1 に答える 1

2

アプリケーションの後にこのようなクラスの名前を付けて、lib/my_app/. たとえば、アプリがFooBarフォルダーを持っていて、クラスを次のようlib/foo_bar/apiに定義する場合lib/foo_bar/api/error.rb

class FooBar::Api::Error
  # ...
end

これはで呼び出すことができますFooBar::Api::Error.new(...)

このルートを選択した場合はlib/config.autoload_pathsconfig/application.rb

config.autoload_paths += Dir["#{config.root}/lib"]

render errorコードがエラーステータスコードを返すようにする方法を知っていますか? 使用していない(:status => error.status)

確かに、しかし私の知る限り、あなたはただ合格することはできませんerror. 次のようなものを呼び出す必要があります

error = FooBar::Api::Error.new({ message: "Some error message" }, status: :bad_request)

render *error.to_a

to_a次に、メソッドを定義する必要がありますFooBar::Api::Error

class FooBar::Api::Error
  def initialize(data={}, options={})
    @data = data
    @options.reverse_merge! status: 200
  end

  def to_a
    [@data, @options]
  end
end

を呼び出すerror.to_aと、渡す引数のリストを含む配列が返されますrender。上記* のレンダリング行の は Splat 演算子 (詳細はこちらrender) で、返された配列全体を最初の引数として送信する代わりに、渡す引数のリストに配列を展開します。

于 2013-04-29T11:35:01.473 に答える