我正在构建一个rails应用程序,我需要能够从api端点发送json用于和android应用程序im构建。
我目前可以从不同的控制器获得我需要的json,但我正在尝试将所有的api调用压缩到一个api控制器。
我的JBuilder文件看起来像这个
json.array!(@rivers) do |river|
json.extract! river, :id, :name, :section, :difficulty, :cfs, :details, :state, :put_in, :take_out, :picture
json.has_alert has_alert? river
end
它目前正在从我的河流控制器索引操作中使用
def index
if !params[:commit].nil?
@rivers = search params
if @rivers.nil?
@rivers = []
end
else
@rivers = River.where(approved: true)
end
end
我有一个JBuilder文件的相同副本,供api river操作使用
def rivers
river_list = search params
if river_list.nil?
river_list = []
end
end
我希望能够在jbuilder文件中呈现自定义json
render json: river_list
但它给了我更多我其实并不想要的信息。是否存在在不使用jbuilder的情况下呈现自定义json的方法。重要的部分是我需要一个json数组
如果您想呈现特定的jbuilder视图文件,您可以这样调用它
render json: "name_of_the_jbuilder_file"
所以你的河流方法看起来像这个
def rivers
river_list = search params
if river_list.nil?
river_list = []
end
render template: "jbuilder_filename"
end
请注意,您的jbuilder文件需要实例变量@rivers
,但rivers
方法没有@rivers
实例变量,因此这将失败,您应该首先实例化实例变量以成功呈现json。
编辑
对不起,请使用render template: "jbuilder_filename"
而不是render json