Я бы смотрел на это как на отношение многие ко многим, когда вам нужна отдельная модель для обработки отношений.
class Word < ActiveRecord::Base
has_many :source_words, :class_name=>"WordLink", :foreign_key=>:source_word_id
has_many :linked_words, :class_name=>"WordLink", :foreign_key=>:linked_word_id
class WordLink < ActiveRecord::Base
belongs_to :source_word, :class_name=>"Word"
belongs_to :linked_word, :class_name=>"word"
Тогда вам просто нужно сделать что-то подобное для создания / отображения слов и синонимов:
w = Word.create(:word_name=>"Cold")
w.source_words.create(:linked_word=>Word.create(:word_name=>"Icy"))
synonyms_as_text_array = w.source_words.collect {|s| s.linked_word.word_name }