Итак, в моем приложении 3 модели, связанные отношениями HABTM:
class Member < ActiveRecord::Base
has_and_belongs_to_many :groups
end
class Group < ActiveRecord::Base
has_and_belongs_to_many :software_instances
end
class SoftwareInstance < ActiveRecord::Base
end
И у меня есть соответствующие таблицы соединений, и я использую фокс-приборы для их загрузки:
- members.yml -
rick:
name: Rick
groups: cals
- groups.yml -
cals:
name: CALS
software_instances: delphi
- software_instances.yml -
delphi:
name: No, this is not a joke, someone in our group is still maintaining Delphi apps...
И я делаю rake db:fixtures:load
и изучаю таблицы. Да, таблицы соединений groups_members и groups_software_instances имеют соответствующие идентификаторы в больших числах, генерируемых хэшированием имен приборов. Ура!
И если я запускаю скрипт / консоль, я могу посмотреть на группы Рика и увидеть, что там есть cals или появляются cals's software_instances и delphi. (Точно так же Delphi знает, что он в группе Cals.) Ууу!
Но если я посмотрю на rick.groups[0].software_instances
... нада. []. И, как ни странно, rick.groups[0].id
это что-то вроде 30 или 10, а не 398398439.
Я пытался поменяться местами, где ассоциация определена в приборах, например,
- members.yml -
rick:
name: rick
- groups.yml -
cals:
name: CALS
members: rick
Нет ошибок, но тот же результат.
(Позже: подтверждено, то же самое поведение в MySQL. На самом деле, я получаю то же самое, если убираю фоксификацию и использую ERB для непосредственного создания таблиц соединения, поэтому:
- license_groups_software_instances -
cals_delphi:
group_id: <%= Fixtures.identify 'cals' %>
software_instance_id: <%= Fixtures.identify 'delphi' $>
(Позже: GAAA, это даже хуже, чем TH! Если я создаю запрос к базе данных, все подключается, но если я запускаю скрипт / консоль или модульный тест, второй прыжок цепочка ассоциаций разорвана, как описано выше. Поэтому, возможно, она не имеет ничего общего с приборами.)
Прежде чем я все это опровергаю, отвергайте фокс-приборы и всех, кто плавает в ней, и просто идентификаторы кодов рук ... кто-нибудь получил предложение относительно того, почему это происходит? В настоящее время я работаю в Rails 2.3.2 с sqlite3, это происходит как в OS X, так и в Ubuntu (и я думаю с MySQL тоже).
TIA, мои товарищи.