Приспособления Rails не поддерживают транзитивные ассоциации - PullRequest
2 голосов
/ 07 января 2011

Итак, в моем приложении 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, мои товарищи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...