Существует, конечно, несколько различных способов достижения этого. Я бы предложил создать составной индекс ключа в этой таблице, чтобы гарантировать, что user_id уникален в таблице. Это гарантирует, что он будет присутствовать только один раз. При миграции вы могли бы написать что-то вроде этого.
add_index(:cars, :worker_id, :unique => true)
Первый аргумент является именем таблицы (не забудьте это вообще множественном вариант имени класса). Имя поля второе. Единственное истинное - это то, что помешает вам добавить дополнительную строку.
Примечание: Это ограничение уровня базы данных. Если вы нажмете это, потому что проверки не поймают его, он выдаст ошибку.
В дополнение к этому решению вы хотите добавить валидацию к самой модели автомобиля.
validates_uniqueness_of :worker_id, message: "can not have more than one car"
Вы увидите, как эта ошибка встречается с чем-то вроде «Идентификатор рабочего не может иметь более одного автомобиля». Скорее всего, вы захотите настроить раздел «Идентификатор рабочего». Обратитесь к этому разделу post за инструкциями о том, как это сделать.
Вам, конечно же, не нужно ограничивать db, но в случае, если кто-то еще вставляет в БД, это хорошая идея. В противном случае у вас будут «недопустимые» данные в отношении Rails.
здесь http://rubyonrailsthrissur.wordpress.com/2012/07/19/one-to-one-relation-in-rails/ наиболее практичное объяснение – montells