2015-11-21 4 views
0

У меня есть модель пользователя. Пользователь содержит поля name и: second_name. Я определяю функцию в моделиРельсы: метод to_json, добавить возвращаемое значение функции

def full_name 
    self.name + ' ' + self.second_name 
end 

Когда я называю to_json() метод на объекте пользователя я получаю {имя: '... ' second_name:' ...'}. Как я могу добавить в поле full_name?

ответ

1

Как насчет определения метода as_json в вашей модели пользователя и переопределения поведения по умолчанию to_json.

Так это будет:

def as_json(options) 
    super(:methods => [:full_name]) 
end 

Для справки также смотрите: http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html

+0

Как отмечает Брайан, это чистое и позволяет вам вызвать несколько методов класса. Кроме того, вы также можете исключить ненужные элементы, добавив в свои варианты 'except' – trh

+0

Спасибо, что много! – motoroller

0

Override .as_json в модели пользователя, добавьте следующие строки в модели пользователя:

def as_json(options) 
    super.merge({ 
     full_name: "#{self.name} #{self.second_name}" 
    }) 
end 

И в вашем контроллере просто напишите: render @user, не явный вызов .to_json

+0

Спасибо, много! – motoroller

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