Модели Rails, как реализовать возможность выбора одиного из трех состояний заказа?

Есть таблица :orders c полями имя и телефон. Как сделать три состояния у заказа (удален, завершен, отклонен, отменен клиентом)?

Через вторичный ключ с полем состояние и первичным ключом, или есть какие-нибудь более элегантные способы?
  • Вопрос задан
  • 2618 просмотров
Решения вопроса 3
@eydemidov
Таблица statuses с отношением one-to-many к таблице orders - вполне элегантный способ.
Ответ написан
YourWest
@YourWest
Ruby Developer
Почему бы не сделать просто поле status, куда записывать 0, 1, 2 и т.д. Да не так гибко, но база не будет нагружаться лишним запросом. Лично я всегда делаю так:

# Enumerable status
  STATUS = {
      0 => :waiting,
      1 => :finished,
      2 => :expired,
      3 => :removed
  }

  STATUS.each do |key, status|
    define_method "#{status}!" do
      self.status = key
      self.save
    end

    define_method "#{status}?" do
      self.status == key
    end
  end

  def status?
    STATUS[self.status]
  end


После этого можно использовать данные методы:

object.finished! # status = 1

object.waiting? # false
object.waiting! # status = 0
object.waiting? # true

object.status? # waiting
Ответ написан
Комментировать
Piranis
@Piranis Автор вопроса
дело говоришь, тоже думал об этом, но как правиьно реализовать не представляю

STATUS = {
0 => :waiting,
1 => :finished,
2 => :expired,
3 => :removed
}

- это все как я понимаю в contoller или как?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы