Тезаурус в Рельсах 3
Я использую Rails 3, и я хотел бы создать приложение, которое работает как тезаурус. Я прочитал некоторые учебные пособия о том, как устанавливать отношения "есть и принадлежат многим" (HABTM), но я не уверен, как настроить мои модели так, чтобы один "элемент" имел и принадлежал многим другим элементам, т.е. синонимы.
Я предполагаю, что я пытаюсь сделать что-то вроде раздела "связанные посты" в блоге, где в конце каждого поста должно быть несколько "связанных постов".
1 ответ
Решение
Я бы смотрел на это как на отношения многие ко многим, когда вам нужна отдельная модель для обработки отношений.
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 }