2014-09-02 95 views
1

在我的應用程序as_json,:foos有很多:bars,而我每個序列化作爲富JSON像這樣:導軌和條件

@foo.as_json(
    except: [:created_at, :updated_at], 
    include: { 
    bars: { only: [:ip_addr, :active] } 
    } 
) 

這給了我以下內容:

{ 
    "id" => 2, 
    "name" => "Hello World", 
    "bars" => [ 
    { "ip_addr" => "192.123.12.32", "active" => 0 }, 
    { "ip_addr" => "192.123.12.33", "active" => 1 } 
    ] 
} 

正如你可以看到,我的序列化哈希包含一個不活動的欄。我怎樣才能從我的哈希排除不活動的酒吧?

這將是巨大的,如果我能做到這一點:

include: { bars: { only: { :active => true }}} 

我揀選as_json儘可能將何去何從?我現在需要切換到活動模型串行器嗎?

回答

3

我想你可以嘗試添加像active_bars一些方法將返回你所需要的東西,如:

def active_bars 
    bars.where active: true 
end 

,或者你甚至可以添加新的關係:

has_many :active_bars, -> { where active: true }, class_name: '..', foreign_id: '..' 

,然後你會能寫:

@foo.as_json(
    except: [:created_at, :updated_at], 
    include: { 
    active_bars: { only: [:ip_addr, :active] } 
    } 
)