2012-11-29 3 views
3

У меня есть приложение Rails, которое отображает вложенную форму в формате json.Как добавить дополнительное поле в Rails 3 Application JSON Response

В ответ JSON я также показываю поле id, представляющее другую таблицу.

Как отобразить имя, соответствующее этому id, что я получаю, чтобы я мог отображать как имя, так и идентификатор в моем json формате.

Мой контроллер показать метод

def show 
    @maintemplate = Maintemplate.find(params[:id]) 
    respond_with (@maintemplate) do |format| 
     format.json { render :json => @maintemplate } 
    end 
    end 

Заранее спасибо ....

+0

Я не уверен, что я понимаю ваш вопрос, но как насчет 'render: json => @ maintemplate.to_json'? –

+0

Я получаю формат Json довольно хорошо, проблема в моем json формате. Я показываю поле id (например: «user_id»: «12»), что соответствует таблице User. Я хочу включить имя, соответствующее этому id («12») в моем json формате. Как это исправить. – Cyber

+0

ОК опубликовал ответ, см. Ниже. –

ответ

4

Попробуйте это:

render :json => @maintemplate.to_json(:include => { :user => { :only => :name } }) 

Это заменит ключ user_id с user ключа и значения с атрибутом nameuser, например:

{ 
    "user_id": "12" 
    "user": { "name": "..." } 
    ... 
} 

Затем вы можете получить доступ к имени пользователя в ответ json с помощью ["user"]["name"]. Вы также можете получить доступ к идентификатору пользователя с помощью ["user_id"].

Подробнее см. В documentation on as_json.

Update:

Используя информацию, представленную в комментариях, я думаю, что это то, что вы на самом деле хотите:

render :json => @maintemplate.to_json(:include => { :routine => { :include => :user, :user => { :only => :name } } }) 
+0

мой «@maintemplte» - это вложенный выход формы .it имеет массив шаблона внутри «@maintemplate», шаблон1 имеет массив шаблона2 .... мой user_id лежит внутри каждого шаблона2. – Cyber

+0

Не могли бы вы объяснить более четко? Что значит «@ maintempalte» - это вложенная форма вывода? Это результат вызова метода find, поэтому он должен быть образцом модели. –

+0

«@maintemplate» - это образец экземпляра. Он содержит массив «дней». У массива «day» есть «рутинный» массив. Все они поступают из разных моделей (дней, подпрограмм, maintemplate). Идентификатор модели «maintemplate», имеющий day_id и rout_id ,Обычная модель имеет user_id (т.е. отображение в json-формате в качестве вывода со многими другими полями). Этот user_id соответствует таблице пользователя, которая имеет имя, возраст и т. Д. .... Я хочу включить это имя также в этот выход json, соответствует тому, что user_id я получаю. – Cyber

1

Добавить метод as_json с дополнительным методом-атрибутов вы хотите к класс, в котором вы звоните.

class MainTemplate 
    ... 

    def name 
    User.find(self.user_id).name 
    end 

    def as_json(options = {}) 
    options[:methods] = :name 
    super(options) 
    end 

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