2017-02-06 2 views
0

Вот код render json: news, :include => {:tags => {:only => :name}, :category => {:only => :name}}, который выводит это:Rails: Изменить выход JSON

{ 
"id": 2, 
"title": "title", 
"tags": [], 
"category": { 
    "name": "lorem" 
} 

Есть ли какой-либо способ вывести его, как это?

{ 
"id": 2, 
"title": "title", 
"tags": [], 
"category": "lorem" # <--- display category name 
} 
+0

Вы используете библиотеку сериализации? Можете ли вы включить информацию об этом в свой пост? –

ответ

0

Внутри вашей модели новостей, вы можете определить:

def as_json(options={}) 
    {id: id, title: title, tags: tags}.tap do |hash| 
    hash[:category] = category.name unless category.nil? 
    end 
end 

, а затем просто: render json: news

Вам, вероятно, придется изменить код as_json, чтобы соответствовать любой структуре вы имеете созданный для вашей модели, но идея состоит в том, чтобы создать хэш, используя формат, который вы хотите для своего json, а затем позвольте рельсам превратить его в json.

+0

теперь я получаю 'undefined method' name 'для nil: NilClass', потому что не все новости имеют категорию. Есть ли способ обход этого? –

+0

можете ли вы разместить запись в таблице для модели новостей из db/schema.rb? Я не могу написать рабочую функцию для вашего новостного класса, не зная его внутренних компонентов. – eiko

+0

ой, я только что видел ваш комментарий. я обновлю свой код. – eiko

Смежные вопросы