如何将一个模型两次关联到另一个模型

嗨我正在制作一个小网站,以帮助我和朋友学习语言。 典型用途:

亚当是英国人,但正在学习日语。 亚当可以通过撰写和提交用日语写的文章来练习日语。 Adam(不允许)提交用他的母语撰写的任何文章。 亚当可以阅读其他正在学习英语的用户的文章(用英语写的)

我试图思考如何模拟这个并且certificate比标准轨道更困难,许多属于我习以为常的协会。

生病需要function

-show all articles written in adams native language @adam.native_language.articles -show all posts written by users just like adam (ie 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。

是啊,你说得对。 用户和语言之间的关联是双重的。 使用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 

这样的事情应该有效。