От документация Django :
MAYBECHOICE = (
('y', 'Yes'),
('n', 'No'),
('u', 'Unknown'),
)
И Вы определяете charfield в своей модели:
married = models.CharField(max_length=1, choices=MAYBECHOICE)
можно сделать то же с целочисленными полями, если Вам не нравится иметь буквы в Вашем дб.
В этом случае, перепишите свой выбор:
MAYBECHOICE = (
(0, 'Yes'),
(1, 'No'),
(2, 'Unknown'),
)
1: Да, это правильно
2: Из документации по uniq :
Если это правда, дубликаты будут опущены из коллекции. Полезно в в сочетании с: through.
Итак, да, если вы стремитесь получить не ту же игру в коллекции игр пользователя или того же пользователя в коллекции пользователей игры, это правильно. Все это объясняется здесь .
Однако это не предотвратит создание дубликатов GameUsers. Для этого вам нужно будет использовать validates_ уникальность _of в модели GameUser:
class GameUser < ActiveRecord::Base
validates_uniqueness_of :game_id, :scope => :user_id
end
3: Нет, вы больше не хотите использовать: id => false. Переключившись с has_and_belongs_to_many на has_many: through, вы повысили свою объединенную таблицу "многие ко многим" до полной модели - GameUser, которая требует собственного идентификатора.
Хотя она старая, эта является все еще хорошая статья для понимания has_many: through.