¿Cómo asocio un modelo dos veces a otro?

Hola, estoy haciendo un sitio pequeño para que yo y mis amigos aprendan idiomas. Uso típico:

Adam es inglés pero está aprendiendo japonés. Adam puede practicar su japonés escribiendo y enviando artículos escritos en japonés. Adam no puede (no está permitido) enviar ningún artículo escrito en su idioma nativo. Adam puede leer artículos (escritos en inglés) de otros usuarios que están aprendiendo inglés

Estoy tratando de pensar cómo modelar esto y está demostrando que es más difícil que los Rails estándar. Muchos pertenecen a asociaciones a las que estoy acostumbrado.

Necesito funcionalidad como

-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 

Necesito un usuario, artículo y modelo de lenguaje. Pero, ¿cómo asocio el lenguaje y los modelos de usuario? Parece que el idioma debe asociarse dos veces al modelo de usuario, una vez para native_language y una vez para foreign_language.

Si, tienes razón. La asociación entre Usuario e Idioma es doble. Es bastante fácil modelar esta situación usando 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 

Algo así debería funcionar.