Как сохранить статусы как коды в БД, но сопоставить их со значимыми словами в рельсах? - PullRequest
1 голос
/ 21 февраля 2010

Мне нужна помощь с этим, пожалуйста ...

Если я сохраню статус транзакции как код в БД, но я хочу перевести их в значимые имена, как мне это сделать? Это даже рекомендуется? Если нет, что может быть альтернативой этому?

Например: в БД статусы "S", "P", "A" и в реальном приложении я хотел бы отобразить: «Отправлено», «Ожидает», «Утверждено» соответственно.

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 февраля 2010

Скажем, к примеру, у вас есть модель с именем Account, в которой вы сохраняете статус транзакции в столбце с именем status, значение которого будет равно числу упомянутых вами кодов, вы можете сделать

class Account < ActiveRecord::Base
  TRANSACTION_STATUS = {
    "S" => "Submitted",
    "P" => "Pending",
    "A" => "Approved"
  }

  def status
    TRANSACTION_STATUS[self[:status]]
  end
end

Таким образом, вы переопределяете метод status, предоставляемый activerecord для Account объекта.

В зависимости от того, как вы собираетесь использовать поле status, может потребоваться создать надлежащий индекс для этих столбцов (например, если вы собираетесь выбирать учетные записи с ожидающей транзакцией и т. Д.)

0 голосов
/ 22 февраля 2010

Вы можете попробовать использовать плагин enum column , чтобы получить эту функциональность.

Миграция для создания таблицы:

add_column :accounts, :status, :enum, :limit => [:submitted, :pending, :approved],
      :default => :submitted

В модели:

validates_columns :status

В контроллере

@account = Account.new # It just works :)
...