У меня было ужасное утро. Много писем о том, почему что-то не работает. После расследования я обнаружил, что существует несоответствие данных, которое вызывает ошибки.
Сценарий
Customer
и Address
- две таблицы.
Customer
содержит
class Customer < ActiveRecord::Base
has_one :address, :foreign_key => "id"
end
Address
Содержит
class Address < ActiveRecord::Base
belongs_to :customer, :foreign_key => "cid"
end
Таким образом, две таблицы совпадают на id
, который является значением по умолчанию, и этот столбец автоматически увеличивается.
Задача
на странице редактирования у нас есть такой код:
params[:line1] = @customer.first.address.line1
Сбой, потому что в таблице адресов не найдено ни одной подходящей записи для клиента. Я не знаю, почему это происходит. Похоже, что со временем многие записи не были добавлены в таблицу Address
. Теперь проблема в том, что при добавлении нового Customer
(скажем, с идентификатором 500) Address
будет добавлено с другим идентификатором (скажем, 425) ... теперь вы не знаете, какой адрес принадлежит какому клиенту.
Вопрос
Будучи новичком в Rails, я спрашиваю, всегда ли считается целесообразным создавать дополнительный столбец для объединения записей, а не зависеть от того, какой столбец автоматически увеличивается? Если бы у меня был отдельный столбец в таблице Address
, в который я бы вручную вставил недавно добавленный идентификатор клиента, эта проблема не возникла бы.