Rails 2.3.8: как анализировать JSON с именами полей, отличными от столбцов БД - PullRequest
1 голос
/ 10 октября 2010

Я уверен, что есть простое решение для этого, но я новичок в Rails и мне нужна помощь с синтаксисом.

В моем контроллере у меня есть:

@products = Product.all
format.json { render :json => @products }

И все работает нормально, возвращая данные с именами столбцов по умолчанию, которые используются в БД:

"product": {
  "created_at": "2010-10-08T17:24:27Z",
  "id": 24,
  "product_date": "2010-08-08",
  "product_name": "Product One",
  "updated_at": "2010-10-08T17:36:00Z"
}

Мне нужно что-то вроде:

"product": {
  "created_at": "2010-10-08T17:24:27Z",
  "id": 24,
  "start": "2010-08-08",
  "title": "Product One",
  "updated_at": "2010-10-08T17:36:00Z"
}

То есть, изменение product_date на start и product_name на title , но только в выводе JSON.

Кажется, что эту проблему легко решить, но я не уверен, как выразить ее в синтаксисе Ruby / Rails, поэтому я очень признателен за любую помощь. Я не могу переименовать столбцы базы данных.

1 Ответ

1 голос
/ 10 октября 2010

Если вы хотите изменить вывод JSON для всех Продуктов везде и всегда, просто переопределите метод to_json в вашей модели Продукта.

Вот простой способ сделать это (в вашем Продуктеопределение класса):

def to_json
  ActiveSupport::JSON.encode({
    :created_at => created_at
    :id => id
    :start => product_date
    :title => product_name
    :updated_at => updated_at
  })
end

Вы можете стать более привлекательным и подключить пользовательский сериализатор, но этого должно быть достаточно для ваших целей.Недостатком явного выполнения этого является то, что если ваша схема изменится, ее придется обновить.Это также нарушит параметры, обычно доступные для метода to_json (:include, :only и т. Д.), Поэтому, возможно, он не слишком горячий.

...