Rails 3 вопрос - блокировка строки на определенное время - PullRequest
0 голосов
/ 21 марта 2011

Я создаю приложение rails 3, в котором оно продает ограниченное количество предметов.Я ищу способ удерживать предмет в течение определенного периода времени, чтобы, когда кто-то выбирает предмет, у него было время приобрести его, прежде чем кто-то еще мог приобрести его до него.Я провел некоторые исследования, касающиеся блокировки строк, но пока не нашел пригодного для использования способа для указания времени.

Спасибо за любую помощь или за идеи

Ответы [ 2 ]

0 голосов
/ 21 марта 2011

Это типичный шаблон рабочего процесса, где вы приобретаете объект на время. Этого легко добиться, внедрив блокировки на уровне приложений.

1) Добавление полей блокировки в модель.

locker_id
lock_until

2) Теперь вы можете реализовать эту логику в модели Product.

class Product

  belongs_to :locker, :class_name => "User",
           :condition => lambda { {:conditions => ["lock_until < ? ", Time.now]}}

  def locked?
    !lock_until.nil? and lock_until > Time.now
  end

  def lock_for_duration(usr, duration=10.minutes)
    return false if locked?
    self.locker_id = user.id
    self.lock_until = duration.from_now
    self.save   
  end

  def release_lock
    return true unless locked?
    self.locker_id = nil
    self.lock_until = nil
    self.save    
  end
end

Вот как это использовать:

usr = User.first
product.lock_for_duration(usr, 30.minutes)
product.locked?
product.locker?
0 голосов
/ 21 марта 2011

Я бы рекомендовал установить locked_until отметку времени, которая проверяется всякий раз, когда кто-то пытается купить один из этих предметов.Если в прошлом не было товаров со временем locked_until, то все товары «распроданы».Для фактической продажи предметов у меня будет sold логическое поле.

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