【问题标题】:When rendering an object in JSON from the controller, how do I include a field from the object's parent?从控制器呈现 JSON 中的对象时,如何包含来自对象父级的字段?
【发布时间】:2016-10-06 21:34:12
【问题描述】:

我使用的是 Rails 4.2.7。通过 show 方法返回对象时,我想包含来自对象父级的对象。我试过了

  def show
    respond_to do |format|
      @my_object = MyObject.find(params[:id])
      format.json { render :json => @my_object.to_json(:include => [:parent, :include => :address]) }
    end
  end

但是这会产生错误

NoMethodError (undefined method `include' for #<MyObject:0x007fa1b433d788>):

包含来自我父母的对象的正确方法是什么?

编辑:这是我的 Rails 应用程序中的父模型

class Parent < ActiveRecord::Base
  belongs_to :address, :autosave => true   #, dependent: :destroy

【问题讨论】:

  • 使用:methods 可能会有所帮助。见tigraine.at/2011/11/17/…
  • 这有什么帮助? “地址”是父对象的关联,而不是方法。
  • 这可能会有所帮助:stackoverflow.com/questions/8899624/…
  • 我的问题中包含了我的父模型。我确实建立了协会。不幸的是,客户端返回的是 my_object.parent.address_id 而不是我想要的“my_object.parent.address”对象。我确实在我的模型中设置了地址关联,因为我对我的问题进行了编辑。
  • 如果你可以进入你的 Rails 控制台并获得你想要的值(my_object.parent.address.street_name 或其他),确认你的关联是正确的,那么我建议使用类似 jbuilder 的东西,这将帮助您明确定义所需的 JSON 结构。

标签: ruby-on-rails json ruby controller format


【解决方案1】:

试试这个

def show

  @my_object = MyObject.find(params[:id])
  render :json => @my_object.to_json(:include => [:parent => {:include => :address}]) 

end

您已在 include 语句中添加了 include,

@my_object.to_json(:include => [:parent, **:include** => :address])

所以 rails 正在搜索 include 作为方法或模型之一。

您可以使用这样的数组来包含多个关系。

:include => [:parent, :address]

【讨论】:

    猜你喜欢
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2021-07-02
    • 2021-08-04
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    相关资源
    最近更新 更多