Автоинкрементное текстовое поле в Rails 3.1 - PullRequest
1 голос
/ 09 февраля 2012

Я новичок в рельсах, и я надеюсь, что вы можете мне помочь.Я создаю приложение для управления своими складами.В разделе «Транспортные документы» мне нужно нередактируемое поле, которое присваивает идентификатор любому документу, и я хочу, чтобы этот идентификатор увеличивался автоматически.

Идентификатор состоит из префикса (изменяется в зависимости от пользователя, вошедшего в систему) и целого числа, которое должно увеличиваться при каждом создании пользователем транспортного документа.Пример пояснит это лучше:

1) Пользователь «Марк» вошел в приложение

First Transport Document ID:  MARK00001 
Second Transport Document ID: MARK00002

1) Пользователь «Питер» вошел в приложение

First Transport Document ID:  PETE00001 
Second Transport Document ID: PETE00002

скоро.Любые предложения о том, как это сделать?

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Для начала я бы получил самое высокое значение в фильтре before_create, а затем сгенерировал бы новое число.Модель User должна иметь что-то вроде метода префикса, чтобы получить префикс пользователя.Предполагая, что TransportDocument принадлежит пользователю, я бы сделал что-то вроде этого:

class TransportDocument << ActiveRecord::Base
  before_create :set_per_user_id

  def document_id_txt
    "#{user.prefix}#{document_id}"
  end

  private
    def set_per_user_id
      val = user.transport_documents.maximum(:document_id)
      self.document_id = val + 1
    end
end

Я не тестировал код, но он должен работать примерно так.Если вам нужно сохранить префикс в поле, было бы немного утомительно возвращать фактическое наибольшее значение.

Установка некоторой проверки в поле document_id для обеспечения уникальности для пользователя также будет хорошей идеей.1006 *

2 голосов
/ 09 февраля 2012

Вы можете подключиться к обратному вызову before_create в своей записи:

class TransportDocument << ActiveRecord::Base
  before_create :set_friendly_id

  private
    def set_friendly_id
      # create your friendly_id here (hard to sample code without knowing your model)
      # friendly_id = current_user.name.upcase + number_of_records_plus_one_nice_format
      self.friendly_id = friendly_id
    end
end

Если вам нужна помощь в сборке friendly_name, нам нужно узнать больше о структуре вашей модели.

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