Как сохранить Mongoid foreign_key как целое число или сохранить родительскую модель с целочисленным идентификатором - PullRequest
12 голосов
/ 31 января 2012

Вот ситуация.

user embed_one profile
profile belongs_to city

Я заполнил таблицу городов с помощью

id as Integer
name as String

Теперь я выполняю user.update_attributes(:profile_attributes{:city_id=>"5"}), имитирующую отправку формы в браузере.Затем я проверяю user.profile Я вижу, что city_id хранится в виде строки.Это делает мои user.profile.city, чтобы дать ноль.

Мне интересно, что здесь делать правильно.Должен ли я позволить моему идентификатору города быть строкой или объектом BSON?Или я должен попытаться перехватить update_attributes, чтобы сделать mongoid хранить city_id как целое число?Причина, по которой я использую Integer в качестве идентификатора для города, заключается в том, что я думал, что поиск по Integer быстрее, чем поиск по строке.Кроме того, у меня есть таблицы состояний и городов, и я хочу, чтобы идентификаторы соответствовали предсказуемым образом, поэтому я не хочу использовать случайный ключ BSON.

1 Ответ

0 голосов
/ 01 февраля 2012

Конечно, если вы используете Mongoid, правильный способ - использовать объекты BSON в качестве идентификаторов. Но если вам абсолютно необходимо использовать целые числа в качестве идентификаторов городов, вы можете смоделировать принадлежать_ с помощью кода, подобного этому

class Profile
  def city
    City.where(:id => self.city_id).last
  end

  def city=(new_city)
    self.city_id = new_city.id
  end
end
...