2015-02-10 2 views
0

Я следующий RABL в моих взглядах:рубин карта JSON множественным, но не все атрибуты с RABL

node(:relations) do |p| 
    related = p.relations.pluck(:related_to_id) 
    Spree::Product.find(related) 
end 

Это делает следующее:

"relations": [ 
{ 
"product": { 
"id": 2, 
"name": "T-SHIRT", 
"description": "Awesome T shirts" 
"created_at": "..." 
"updated_at: "..." 
. 
. 
. 
bunch of other columns that I don't need. 

Мой вопрос, как я только захватить :name и :description, так что выход JSON выглядит следующим образом:

"relations": [ 
    { 
    "product": { 
    "name": "T-SHIRT", 
    "description": "Awesome T shirts" 
    } 
] 

Я пробовал отображение его, Spree::Product.find(related).map { |r| [r.name, r.description] }

Но это возвращает только те значения, например, так:

"relations": [ 
"T-SHIRT", 
"Awesome T shirts" 
] 

Спасибо за вашу помощь!

UPDATE:

Когда я пишу:

child :related_products do 
    attributes :name, :description 
end 

я получаю:

"spree_relations": [ 
{} 
] 

Ссылка на модель:

https://github.com/spree-contrib/spree_related_products/blob/master/app/models/spree/relation.rb

+0

Можете ли вы использовать '.select' как' Spree :: Product.select («name, description») ' – Sontya

ответ

1

Ну, возможно, есть несколько способов сделать это.

Вы можете использовать рельсы #as_json способ.

node(:relations) do |p| 
    related = p.relations.pluck(:related_to_id) 
    Spree::Product.find(related).as_json(only: [:name, :description]) 
end 

Или вы можете попробовать сделать это rabl способом.

child :related_products do 
    attributes :name, :description 
end 

Но для этого вам может потребоваться изменить свою модель.

+0

Я предпочитаю rabl-путь, я обновил вопрос, мне нужно сделать его' принадлежит_то: product' – neo

+0

Неважно. Кажется, вы должны использовать тип отношения. Например, «product.up_sells» –