Тезаурус в Рельсах 3 - PullRequest
1 голос
/ 20 июня 2011

Я использую Rails 3, и я хотел бы создать приложение, которое работает как тезаурус.Я прочитал некоторые учебные пособия о том, как устанавливать отношения «есть и принадлежат многим» (HABTM), но я не уверен, как настроить мои модели так, чтобы один «элемент» имел и принадлежал многим другим элементам, т.е.синонимы.

Я предполагаю, что я пытаюсь сделать что-то похожее на раздел «связанные посты» в блоге, где в конце каждого поста должно быть несколько «связанных постов».

1 Ответ

2 голосов
/ 20 июня 2011

Я бы смотрел на это как на отношение многие ко многим, когда вам нужна отдельная модель для обработки отношений.

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 }
...