В документации относительно Приспособлений (http://api.rubyonrails.org/classes/Fixtures.html) они обеспечивают следующий пример использования ссылок маркировки для ассоциаций:
### in pirates.yml
reginald:
name: Reginald the Pirate
monkey: george
### in monkeys.yml
george:
name: George the Monkey
pirate: reginald
Так следуя их примеру, у меня есть модель User что has_one: профиль, модель Profile, что belongs_to: пользователь, и попробованный для установки приспособлений на их пример:
### in users.yml
reginald:
id: 1
login: reginald
### in profiles.yml
reginalds_profile:
id: 1
name: Reginald the Pirate
user: reginald
(Примечание: так как моя ассоциация является односторонней, Пользовательское приспособление не имеет "профиля: reginalds_profile" ассоциация - помещение его в причинах ошибка, потому что таблица SQL не имеет никакого атрибута profile_id.)
Проблема в моих модульных тестах, которые все, кажется, загружает правильно, но пользователи (: reginald), .profile всегда является нолем. Что я пропускаю?
Основываясь на предложении Тадмана, я провел еще несколько поисков и нашел ответ в другом месте на этом сайте, так что я могу его опубликовать.
См. Сообщение под названием Автоматические ассоциации в приспособлениях ruby on rails
По-видимому, способ, которым Rails находит связанные приспособления, когда вы используете метки (user: reginald) вместо идентификаторов (user_id: 1), заключается в хешировании имени и предположении хеш - это идентификатор. Если вы установите идентификатор на что-то конкретное, это не удастся. Но если вы позволите Rails автоматически назначать идентификаторы, он будет использовать эту схему хеширования. Таким образом, в документации для меток ассоциации приборов отсутствует ключевой лакомый кусочек - если вы используете ярлыки, вы должны избегать применения ваших собственных идентификаторов в приборах, которые необходимо сопоставить. Светильники, не соответствующие меткам, могут иметь любую выбранную вами схему идентификации.
Возможно, вам придется объявить, что вы загружаете все эти фикстуры, поскольку я не верю, что загрузчик фикстур автоматически следует таким ассоциациям. В некоторых случаях вам, возможно, придется сделать больше, чем просто:
fixtures :all
Фактическое объявление каждого из них:
fixtures :users, :profiles