2013-07-30 32 views
0

根據該RABL documentation under "Child nodes",以下是可能的:Rabl的子塊產率的子對象的父代替

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?,這會導致太多的數據庫查詢,所以我想避免這種情況。

我做錯了什麼?有沒有辦法解決這個問題?

+0

調查活動模型序列化器 - 比簡單的rabll恕我直言 – timpone

+0

謝謝@timpone,但我必須使用RABL,因爲它具有我需要的功能活動模型串行器沒有。 – eirikir

回答

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的護欄寶石。我的解決方案適用於'rabl',我不太確定這個寶石:)

+0

感謝您解釋這種差異,現在一切都合情合理! – eirikir