как я связываю одну модель дважды другому

Привет я делаю небольшой сайт для помощи мне, и друзья учат языки. Типичное использование:

Adam - англичанин, но учит японский язык. Adam может практиковать свой японский язык путем записи и представления статей, написанных на японском языке. Наклон Adam (не позволенный) отправляет любые статьи, написанные на его родном языке. Adam может прочитать статьи (записанный на английском языке) другими пользователями, которые учат английский язык

Я пытаюсь думать, как смоделировать это и его оказывание, более трудное, чем стандартные направляющие имеют, многие принадлежат ассоциациям, к которым я приучен.

Функциональность потребности Иллинойса как

-show all articles written in adams native language
@adam.native_language.articles

-show all posts written by users just like adam (i.e. learning the same language)
@adam.foreign_language.articles

-perhaps showing all posts written by language learners in one particular language
@language => Japanese
@langauge.posts

Мне нужны пользователь, статья и языковая модель. Но как я связываю пользовательские модели и язык? Такое чувство, что язык должен быть связан дважды с пользовательской моделью, однажды для native_language и однажды для foreign_language.

8
задан robodisco 9 April 2010 в 10:17
поделиться

1 ответ

Да, вы правы. Связь между пользователем и языком двоякая. Эту ситуацию довольно легко смоделировать с помощью Rails:

class Language < AR::Base
  has_many :native_speakers, :class_name => "User", :foreign_key => "native_language_id"
  has_many :second_language_speakers, :class_name => "User", :foreign_key => "second_language_id"
  has_many :articles
end

class User < AR::Base
  # we expect the users table to have native_language_id and second_language_id columns
  belongs_to :native_language, :class_name => "Language"
  belongs_to :second_language, :class_name => "Language"
  has_many :second_language_articles, :through => :second_language, :source => :articles
  has_many :native_language_articles, :through => :native_language, :source => :articles
end

class Article < AR::Base
  belongs_to :language
end

Что-то вроде этого должно сработать.

18
ответ дан 5 December 2019 в 09:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: