RAILS: Выполнение расчетов на полях в model.rb - PullRequest
0 голосов
/ 22 января 2012

Я использую event_calendar gem в приложении rails.Event_calendar добавляет следующее в модель событий, чтобы определить даты начала и окончания представления календаря.

has_event_calendar :start_at_field  => 'sdate', :end_at_field => 'tdate'

, где sdate и tdate - поля в модели.

Однако,в моем случае я не храню даты окончания в базе данных.Конечные даты рассчитываются на основе поля длительности, т.е. sdate + duration.У меня не было проблем с вычислением дат окончания в другом месте, но я не могу настроить его для event_calendar.

В основном мне нужно сделать

has_event_calendar :start_at_field  => 'sdate', :end_at_field => '[event.sdate]+[event.duration]'

, но я не смог определитьправильный синтаксис.

  1. Возможно / целесообразно выполнять подобные расчеты в модели?Если да, то каков правильный синтаксис для получения и манипулирования значениями базы данных?
  2. Должен ли я переместить этот расчет в переменную?Каковы плюсы и минусы этого?

Я боролся с этим некоторое время.Благодарен за руку помощи, чтобы узнать, как это работает.

Спасибо!

РЕДАКТИРОВАТЬ

Рассматриваемая модель выглядит следующим образом:

# == Schema Information
# Schema version: 20110607040735
#
# Table name: schedules
#
#  id                 :integer         not null, primary key
#  sdate              :date
#  tdate              :date
#  duration           :integer
#  created_at         :datetime
#  updated_at         :datetime
#

class Schedule < ActiveRecord::Base

  attr_accessible :sdate, :tdate, :duration

  has_event_calendar :start_at_field  => 'sdate', :end_at_field => calculated_tdate

  scope :default, :order => 'schedules.sdate ASC'

  def calculated_tdate
       self.sdate+self.cruise.duration
  end

end

но возникает ошибка

undefined local variable or method `calculated_tdate' for #<Class:0x10b62cb98>

Ответы [ 3 ]

0 голосов
/ 22 января 2012

Вы можете просто позвонить

object.calculate_tdate

, чтобы узнать дату окончания

0 голосов
/ 29 января 2012

Обсудив это с проблемой с разработчиками event_calendar, кажется, что в данный момент невозможно использовать вычисленную дату окончания.Плагин полагается на наличие столбца даты окончания, указанного в базовой таблице.Я уверен, что плагин может быть взломан, чтобы обеспечить необходимое поведение.Я добавлю больше, если я добьюсь прогресса в этом.Спасибо всем, кто дал предложения.

0 голосов
/ 22 января 2012

Это зависит от того, как работает самоцвет.Если он действительно запрашивает базу данных, вам нужно будет сохранить эти данные в базе данных, но если он вызывает только данный метод с учетом того, что атрибут является сгенерированным методом ActiveRecord, вы можете вручную определить такой метод в своей модели:

def tdate
     self.sdate+self.duration
end

Дайте ему попытку ...

О вашем второстепенном вопросе: это принцип построения базы данных, позволяющий не хранить в базе данных данные, которые могут быть рассчитаны на основе других полей, уже имеющихся в базе данных.как нет другой альтернативы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...