要求応答

HTTP要求から来るメタデータにアクセスするために、アクションにはプライベートオブジェクトrequestがありRack::Requestます。ここでは、私たちがイントロスペクションできる情報の例を示します。

# apps/web/controllers/dashboard/index.rb
module Web::Controllers::Dashboard
  class Index
    include Web::Action

    def call(params)
      puts request.path_info      # => "/dashboard"
      puts request.request_method # => "GET"
      puts request.get?           # => true
      puts request.post?          # => false
      puts request.xhr?           # => false
      puts request.referer        # => "http://example.com/"
      puts request.user_agent     # => "Mozilla/5.0 Macintosh; ..."
      puts request.ip             # => "127.0.0.1"
    end
  end
end

request着信HTTP要求ごとに
a をインスタンス化すると、パフォーマンスが少し低下する可能性があります。代わりに、accepts?生のRack環境のようなプライベートアクションメソッドから同じ情報を取得することを検討してくださいparams.env

 

応答

暗黙の戻り値は#call直列化されていますRack::Response#finishを参照)。

# apps/web/controllers/dashboard/index.rb
module Web::Controllers::Dashboard
  class Index
    include Web::Action

    def call(params)
    end
  end
end

# It will return [200, {}, [""]]

明示的にステータス、ヘッダ、ボディを設定するためのプライベートアクセサリを持っています:

# apps/web/controllers/dashboard/index.rb
module Web::Controllers::Dashboard
  class Index
    include Web::Action

    def call(params)
      self.status = 201
      self.body   = 'Your resource has been created'
      self.headers.merge!({ 'X-Custom' => 'OK' })
    end
  end
end

# It will return [201, { "X-Custom" => "OK" }, ["Your resource has been created"]]

ショートカットとして使うことができます#status

# apps/web/controllers/dashboard/index.rb
module Web::Controllers::Dashboard
  class Index
    include Web::Action

    def call(params)
      status 201, "Your resource has been created"
    end
  end
end

# It will return [201, {}, ["Your resource has been created"]]