【发布时间】:2018-09-26 00:50:18
【问题描述】:
我有一个 Rails 4 API。当用户在视图中搜索船只时,会执行此方法以获取与搜索过滤器匹配的所有船只,并使用渲染 ActiveModel 和 :include 和 :only 以 json 格式返回船只模型数组,如下所示:
render :json => @boats, :include => { :mainPhoto => {:only => [:name, :mime]},
:year => {:only => :name},
# other includes...}
这很好用。
但是,除此信息外,在视图中,我想显示船的总数,例如“显示 80 艘船中的 1 - 20 艘”,因为有分页功能。所以,关键是我需要提供 80 艘船。我想避免发送两个执行几乎相同逻辑的请求,因此我的想法是只运行一次 searchBoats 方法,并在结果中提供船只列表和变量 numTotalBoats 中的船只总数。我了解 numTotalBoats 不是船模型属性。所以,我认为它应该在渲染结果中放入一个自变量。 比如:
render :json => {boats: @boats with all the includes, numTotalBoats: @NumTotalBoats}
我尝试了数千种组合,但是或者我遇到了语法错误,或者它们都没有返回预期的结果,比如
{boats: [boat1 with all the includes, boat2 with all the includes, ... boatN with all the includes], numTotalBoats: N}
【问题讨论】:
-
你试过这样吗?
render :json => {boats: @boats, numTotalBoats: @boats.size} -
您的意思是您正在使用
active_model_serializersgem? AMS 可以用作 PORO,这意味着您可以预先获取可序列化对象,然后将其传递给render方法。你可以从 AMS 文档 How to serialize a Plain-Old Ruby Object (PORO) 和 Using AMS Outside Of A Controller 中找到这个想法 -
我不这么认为。我没有安装gem。只是 ror 提供的默认活动模型。
-
什么是
numTotalBoats:?是模型还是方法? -
这不是一个模型,它只是一个变量,我需要传递所有船只的数量。
标签: ruby-on-rails json