Рельс грязный и смена даты - PullRequest
0 голосов
/ 07 апреля 2011

Иметь столбец в ордерах с именем closed_date, который является полем DateTime.

Использование грязного. пытаюсь сделать if self.closed_date_changed? но это не работает. Нужно ли делать что-то особенное для отслеживания изменений с помощью полей даты и времени?


EDIT Использование Rails 3.0.3, Ruby 1.9.2p136

Код в контроллере заказов

def update
 @order = Order.find(params[:id])
  if @order.update_attributes(params[:order])
    @order.close_order
  end
 end
end

В модели

include ActiveModel::Dirty

def close_order
  if self.closed?
    if self.closed_date_changed?
      self.items.each do |item|
        item.update_attribute(:created_at, self.closed_date)
      end
    end
  else
    self.update_attributes(:closed_date => Time.now, :closed => true)
    self.items.each do |item|
       item.update_attribute(:created_at => Time.now)
          item.schedule_any_tasks
        end
    end
  end
end

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Я думаю, что вы имеете в виду что-то вроде:

def save_changes
  if closed_date_changed?
    # do something like save the modified data to a table
  else
    # do anything else
  end
end

И самое главное, не забудьте вызвать этот метод при обратном вызове before_save (update).

Поскольку только измененияостается, пока фактическая запись не сохранена.

Надеюсь, это поможет!

0 голосов
/ 07 апреля 2011
def start_date_changed?
  return true  if self.start_date != self.start_date_was 
  return false
end

Я использую был , который проверяет изменение значения ..

Спасибо

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