繁体   English   中英

在JBuilder Ruby on Rails中使用引用的模型对象

[英]Using a referenced model object in JBuilder Ruby on Rails

我正在尝试学习Ruby on Rails,并且一直试图获得比我一直关注的教程稍微复杂的JSON响应。

我有两种模型,如下所示:

class Worker < ActiveRecord::Base
  has_many :tips
end

class Tip < ActiveRecord::Base
  belongs_to :worker
end

因此,每个工人都有很多技巧。

我的控制器如下:

class WorkersController < ApplicationController

  skip_before_filter :verify_authenticity_token

  def index
    @workers= Worker.all
  end

  def show
    @worker= Worker.find(params[:id])
    @tips = @worker.tips
  end

end

class TipsController < ApplicationController

  skip_before_filter :verify_authenticity_token

  def index
    @tips = Tip.all
  end

  def show
    @tip = Tip.find(params[:id])
  end

end

因此,正如您在WorkersController中看到的那样,我将所有Worker的提示都分配给@tips变量。

现在,我想以JSON格式返回此信息,并且我正在使用局部函数来尝试实现此目的。

这是Worker部分:

json.(worker, :id, :name, :location, :image)

这是部分技巧:

json.(tip, :id, :title, :summary, :rating)

两者都在views / layouts / workers目录下

这是我实际上要返回的JSON(它位于一个名为show.json.jbuilder的文件中:

json.worker do
  json.partial! 'worker', worker: @worker
  json.tips do
    json.partial! 'tip', tip: @tip
  end
end

但是,这给了我500内部服务器错误。

如果我这样离开:

json.themepark do
  json.partial! 'themepark', themepark: @themepark
end

我得到了JSON,但是当然我缺少了我需要的数据。 我不确定下一步该怎么做才能弄清楚我在做什么错,所以想知道是否有人可以帮助我解决我的错误?

500可能是因为你没有@tip定义workers_controller#show

为了成功渲染现有对象,您需要执行以下操作:

json.worker do
  json.partial! 'worker', worker: @worker
  json.tips do
    json.partial! 'tip', collection: @tips, as: :tip
  end
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM