【问题标题】:RABL child block yields child object instead of parentRABL 子块产生子对象而不是父对象
【发布时间】:2013-07-30 20:04:10
【问题描述】:

根据RABL documentation under "Child nodes",以下是可能的:

object @user
child :posts do |user|
  attribute :title unless user.suspended?
end

这意味着块产生的user变量是父对象@user

但是,当我尝试以下操作时:

collection @listings
child :address do |listing|
  attribute :number_and_street unless listing.address_hidden?
end

我收到NoMethodError

undefined method `address_hidden?' for #<Address:0x007fb83d6eaf80>

这意味着该块正在产生子地址对象,而不是文档所暗示的父 @listing 对象。

我能看到的唯一解决方法是address.listing.address_hidden?,这会导致数据库查询过多,所以我想避免这种情况。

我做错了吗?有什么办法可以解决这个问题吗?

【问题讨论】:

  • 查看活动模型序列化器 - 比 rabl 恕我直言要简单得多
  • 感谢@timpone,但我必须使用 RABL,因为它具有我需要的 Active Model Serializer 所没有的功能。

标签: ruby-on-rails serialization ruby-on-rails-3.2 rabl


【解决方案1】:

当您使用集合时,子块不会产生单个对象。 我要做的就是把它分成两个文件。

index.json.rabl

collection @listing
extends "app/view/listings/base"

base.json.rabl

object @listing
child :address do |listing|
  attribute :number_and_street unless listing.address_hidden?
end

编辑: 我刚刚注意到您正在使用 rabl-rails gem。我的解决方案适用于“rabl”,我不太确定这个 gem :)

【讨论】:

  • 感谢您解释这种差异,现在一切都变得有意义了!
猜你喜欢
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多