RABL子块生成子对象而不是父对象

时间:2013-07-30 20:04:10

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

根据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>

意味着该块正在产生子地址对象而不是父{H}对象,如文档所暗示的那样。

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

我做错了吗?有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

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宝石。我的解决方案适用于'rabl',我不太确定这个宝石:)