Ruby on rails 将参数传递给grape实体模块
项目的需求现在迫使我将参数传递给嵌套实体。 我有一个实体A和一个实体B,它们显示一些信息,需要系统上的A标识符来构建它们Ruby on rails 将参数传递给grape实体模块,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-4,grape,grape-entity,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 4,Grape,Grape Entity,项目的需求现在迫使我将参数传递给嵌套实体。 我有一个实体A和一个实体B,它们显示一些信息,需要系统上的A标识符来构建它们 module Services module Trips class TripPreviewResponseEntity < Grape::Entity expose :id expose :title expose :duration expose :total_price expose :description expose
module Services
module Trips
class TripPreviewResponseEntity < Grape::Entity
expose :id
expose :title
expose :duration
expose :total_price
expose :description
expose :details
expose :destinations, using: Destinations::DestinationResponseEntity
end
end
end
在嵌套实体中,按以下方式使用trip_id参数选项:
expose :trip_info do |item,options|
item.show(options[:trip_id])
end
但是说对象没有定义到实体中是失败的。有没有办法做到这一点?
有什么想法吗?模块服务
模块跳闸
类TripPreviewResponseEntity
我不确定,但我认为在这种情况下您没有访问父对象的权限。此外,“expose”方法不会将额外的参数传递给“options”散列,因此不能这样做。但是请注意,您可以使用“present”方法将额外的参数传递给API中的“options”散列,以便使用这种方法传递父对象。但是,我认为它在返回数组的情况下不起作用。我使用的是present trips,:with=>trips::TripResponseEntity来表示包含一行代码的集合,这种方法禁止我使用额外的参数。不,Grape允许您这样做“当前行程,:with=>Trips::TripResponseEntity,:trip=>trip”。在您的行程或目的地实体内,您可以使用“选项[:trip]访问此参数“.想象一下如何使用模型内部的方法来实现它吗?这意味着,离开响应实体方式之外。In-trip:公开所有_目的地,当目的地json的格式与响应实体的格式相同时,模型有一个名为all_destinations的方法。在这一点上,我有旅行id。
expose :trip_info do |item,options|
item.show(options[:trip_id])
end
module Services
module Trips
class TripPreviewResponseEntity < Grape::Entity
expose :id
expose :title
expose :duration
expose :total_price
expose :description
expose :details
expose :destinations do |trip, _options|
DestinationResponseEntity.represent(trip.destinations, trip_id: trip.id)
end
end
end
end