【问题标题】:Unable to nest JSON Rails无法嵌套 JSON Rails
【发布时间】:2015-01-06 02:06:12
【问题描述】:

我无法通过 rails 嵌套具有 has_many through 关系的对象。

我的模型如下所示:

class SessionDetail < ActiveRecord::Base
 has_many :session_enrollments, dependent: :destroy
 has_many :customers, through: :session_enrollments
end

class SessionEnrollment < ActiveRecord::Base
 belongs_to :customers   //column name is "customers_id"
 belongs_to :session_details //column name is "sessiondetails_id"
end

class Customer < ActiveRecord::Base
 has_many :session_enrollments
 has_many :session_details, through: :session_enrollments
end

我正在尝试嵌套一个 json 对象以返回一组会话详细信息,其中包含一个客户子数组和一个 session_enrollments 子数组(一个对象)

我的控制器当前看起来像这样:

def return_trainers_sessions
  @trainer_requests = SessionDetail.where(trainers_id: params[:trainers_id], state:     "PENDING")

  unless (!@trainer_requests.any?)
    respond_to do |format|
    msg = {:status => "SUCCESS", :messages => "Requests Found", :requests => @trainer_requests.as_json(:includes => {:customers => {:include =>:session_enrollments}})}
     format.json  { render :json => msg } # don't do msg.to_json
  end

我也尝试过创建一个类方法,但只能嵌套客户。

我最终没有返回任何客户或 session_enrollments,所以我的 json 看起来就像我从未将包含添加到 .as_json 的右侧

【问题讨论】:

  • 尝试删除:includes =&gt;中的字母s,使其变为:include =&gt;
  • @Trip 这样做会给我一个 500 错误。日志说未初始化的常量 SessionDetail::Customers。
  • 你可以在终端运行命令,看看返回是什么?
  • @trip 抱歉,curl 请求挂断了,只是在下一行看到一个 >
  • 你能在你的unless 语句中抛出一个调试器,然后在控制台中运行它,然后粘贴确切的返回值吗?

标签: ruby-on-rails json activerecord


【解决方案1】:

注意你的复数形式。

class SessionDetail < ActiveRecord::Base
  has_many :session_enrollments, dependent: :destroy
  has_many :customers, through: :session_enrollments
end

# a session enrollment belongs to a single customer, and a single session detail. Similarly
# the foreign key fields should be singular, customer_id, session_detail_id
class SessionEnrollment < ActiveRecord::Base
  belongs_to :customer   
  belongs_to :session_detail
end

class Customer < ActiveRecord::Base
  has_many :session_enrollments
  has_many :session_details, through: :session_enrollments
end

【讨论】:

  • 哇,谢谢!我最终制作了一个类方法,但我会试试这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
相关资源
最近更新 更多