Вот что у меня есть:
class Show < ActiveRecord::Base
belongs_to :event
# use default_scope so shows are ordered by date by default
default_scope order("date ASC")
end
class Event < ActiveRecord::Base
has_many :shows, :dependent => :destroy
has_and_belongs_to_many :users
scope :future, lambda { includes(:shows).joins(:shows).where("shows.date > ?", Date.today).group("event_id") }
def start_date
shows.first.date
end
def end_date
shows.last.date
end
def ends_in_future?
end_date > Date.today
end
end
Я хотел бы создать действие контроллера для использования с jqGrid.Пока что использование Event.includes(:shows).all.to_a
возвращает все шоу в строке JSON, но я не могу получить start_date
и end_date
, что довольно понятно.Можно ли получить производные / рассчитанные свойства в JSON?
Я также заметил, что показы для каждого события отсутствуют в строке JSON.Можно ли как-нибудь получить все события, дополненные объектами дочерних шоу, отображаемыми в строке JSON?
Большое спасибо, Дэни.
РЕДАКТИРОВАТЬ: Частично решил эту проблему с помощью as_json(:include => :shows)
в действии контроллера.Это возвращает событие и все связанные шоу для каждого события.Осталось только выяснить, как я могу включить start_date
и end_date
в строку json ...
РЕДАКТИРОВАТЬ: Здесь был мой оригинальный код действия контроллера - это может быть не лучший код, так какЯ до сих пор разбираюсь в Rails:
matches = Event.includes(:shows).all
respond_to do |format|
format.json {render :json => matches.as_json(:include => :shows)}
end
Как выяснилось, мне не нужно сначала выполнять запрос - он может быть просто частью ответа на запрос json.Сначала я должен был прочитать спецификации as_json намного ближе!Вот решение в моем действии контроллера:
respond_to do |format|
format.json {render :json => Event.all.as_json(:include => :shows, :methods => [:start_date, :end_date])}
end
Это отрисовывает все, включая «производный» метод.К сожалению, это, кажется, вызывает много запросов.Это обеспечивает строку json, которую я хочу, но это лучший способ?Хотелось бы услышать любые улучшенные методы.