К сожалению, ответ Уистлера может не подходить во многих случаях. Например, это не работает в обоих направлениях. Например, предположим, что вы создаете новое слово:
word = Word.create(:word_name => 'tremble')
['shake', 'vibrate'].each { |syn| word.synonyms.create(:word_name => syn) }
Теперь, если вы сделаете:
word = Word.find_by_word_name('tremble')
p word.synonyms # this would print out the Words with the word_name 'shake' and 'vibrate'.
однако,
если вы сделали это наоборот:
word = Word.find_by_word_name('vibrate')
p word.synonyms # this would print an empty association.
Это говорит о том, что слово «вибрировать» не имеет синонимов.
Таким образом, в принципе, этот метод не будет работать в обоих направлениях (т. Е. Вибрация является синонимом дрожания, а дрожание - синоним вибрации)
Редактировать: В некотором смысле, вы можете использовать этот подход, однако вам придется явно назначать синонимы для каждого слова. Таким образом, хотя вы указали синонимы дрожания («вибрировать» и «встряхнуть»), вам все равно придется указывать синонимы «дрожания» («дрожать» и «вибрировать») и «вибрировать» (которые являются « дрожи и дрожи).