【问题标题】:Using rails jbuilder file in multiple locations在多个位置使用 rails jbuilder 文件
【发布时间】:2016-03-31 01:09:18
【问题描述】:

我正在构建一个 Rails 应用程序,我需要能够从一个 api 端点发送 json 以用于构建 Android 应用程序。

我目前可以从另一个控制器获取我需要的 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。我已经能够使用

从 api 控制器呈现 json
render json: river_list

但它给了我更多我实际上并不想要的信息。无论如何在不使用 jbuilder 的情况下呈现自定义 json。重要的是我需要一个 json 数组

【问题讨论】:

    标签: ruby-on-rails ruby json


    【解决方案1】:

    如果要渲染具体的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

    【讨论】:

    • 所以当我尝试这个时它只是将文件名直接呈现为 json
    • 对不起,答案不正确,我已经更新了我的答案。请改用render template: "filename"
    • 我让它与渲染“文件名”一起工作。感谢您的帮助
    猜你喜欢
    • 2012-10-03
    • 2012-10-03
    • 2017-12-24
    • 2014-08-17
    • 2014-11-15
    • 1970-01-01
    • 2017-06-25
    • 1970-01-01
    • 2022-07-01
    相关资源
    最近更新 更多