Подтвердить что ты не робот

Rails рендеринга как json, включают вложенный атрибут и сортировку

Я пытаюсь отобразить объект как json, включая вложенные атрибуты и отсортировать их по атрибуту created_at.

Я делаю это с помощью кода:

format.json  { render :json => @customer, :include => :calls}

Как я могу сортировать вызовы с помощью атрибута created_at?

4b9b3361

Ответ 1

Если вы думаете, как работает Rails, вызовы - это всего лишь метод, который относится к модели Call. Есть несколько способов сделать это. Один - установить опцию заказа в ассоциации. Один из них заключается в том, чтобы изменить масштаб по умолчанию для модели вызова глобально, другой создает новый метод в модели Customer, который возвращает вызовы (полезно, если вы хотите что-либо сделать с вызовами перед кодированием.)

Способ 1:

class Customer < ActiveRecord::Base
  has_many :calls, :order => "created_at DESC"
end

UPDATE

Для рельсов 4 и выше используйте:

class Customer < ActiveRecord::Base
  has_many :calls, -> { order('created_at DESC') }
end

Способ 2:

class Call < ActiveRecord::Base
  default_scope order("created_at DESC")
end

Способ 3:

class Call < ActiveRecord::Base
  scope :recent, order("created_at DESC")
end

class Customer < ActiveRecord::Base
  def recent_calls
    calls.recent
  end
end

Затем вы можете использовать:

format.json  { render :json => @customer, :methods => :recent_calls}