Я создаю приложение словаря синонимов в Rails 3.2.13, где каждое слово имеет много значений, и каждое значение связано со многими словами.Rails self-referential вложенная ассоциация не работает с областью
Следовательно, для того, чтобы получить все синонимы к искомому термину (eg'house ') Я хотел бы быть в состоянии сделать что-то вроде:
Word.syno.find_by_entry('house')
Я попытался реализация с областью, как это :
class Meaning < ActiveRecord::Base
has_and_belongs_to_many :words
has_and_belongs_to_many :synonyms, :class_name => "Word"
end
class Word < ActiveRecord::Base
attr_accessible :entry
has_and_belongs_to_many :meanings•
scope :syno, includes(:meanings => :synonyms)
end
в настоящее время я могу получить синонимы к «дому», с кодом, как: Word.find_by_entry('house').meanings.first.synonims
Однако, когда я прошу Word.syno.find_by_entry('house')
, я получаю слово «дом» его эльф и ни один из его синонимов.
Эти сгенерированные запросы SQL, как сообщают рельсы консоль, для этого последнего выражения:
1.9.3p286 :011 > Word.sino.find_by_entry("house")
Word Load (0.5ms) SELECT `words`.* FROM `words` WHERE `words`.`entry` = 'house' LIMIT 1
SQL (0.3ms) SELECT `meanings`.*, `t0`.`word_id` AS ar_association_key_name FROM `meanings` INNER JOIN `meanings_words` `t0` ON `meanings`.`id` = `t0`.`meaning_id` WHERE `t0`.`word_id` IN (10112)
SQL (12.9ms) SELECT `words`.*, `t0`.`meaning_id` AS ar_association_key_name FROM `words` INNER JOIN `meanings_words` `t0` ON `words`.`id` = `t0`.`word_id` WHERE `t0`.`meaning_id` IN (1174, 3941, 4926, 7360)
=> #<Word id: 10112, entry: "house", changed_at: nil, updated_at: nil>
Как я должен написать свою сферу, чтобы избежать этого?
Нет. Я пробовал, и я тоже не работаю. Я получаю те же результаты. Интересно, почему последний SQL-запрос построен на основе ассоциации Word-Meaning, а не на ассоциации Meaning-Synonim. – CarlesAndres