在多个位置使用rails jbuilder文件



我正在构建一个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

最新更新