0

URLを生成するときにグレープエンティティでホストとポートを取得しようとしています

class Person < Grape::Entity
    expose :url do |person,options| 
        "http://#{host_somehow}/somepath/#{person.id}"
    end
end 

オプション ハッシュを調べてみましたが、'env' ハッシュが空です。

4

2 に答える 2

2

以下は、Grape 0.6.0、Grape-Entity 0.3.0、Ruby 2.0.0 で動作します。

require 'grape'
require 'grape-entity'

# in reality this would be Active Record, Data Mapper, whatever
module Model
  class Person
    attr_accessor :identity, :name
    def initialize i, n
      @identity = i
      @name = n
    end
  end
end

module APIView
  class Person < Grape::Entity
    expose :name
    expose(:url) do |person,opts| 
      "http://#{opts[:env]['HTTP_HOST']}" + 
        "/api/v1/people/id/#{person.identity}"
    end
  end
end

class MyApp < Grape::API
  prefix      'api'
  version     'v1'
  format      :json

  resource :people do
    get "id/:identity" do
      person = Model::Person.new( params['identity'], "Fred" )
      present person, :with => APIView::Person
    end
  end
end

クイックテスト:

curl http://127.0.0.1:8090/api/v1/people/id/90

=> {"name":"Fred","url":"http://127.0.0.1:8090/api/v1/people/id/90"}
于 2013-10-14T10:12:26.733 に答える