Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何将一个模型与另一个模型关联两次_Ruby On Rails_Associations - Fatal编程技术网

Ruby on rails 如何将一个模型与另一个模型关联两次

Ruby on rails 如何将一个模型与另一个模型关联两次,ruby-on-rails,associations,Ruby On Rails,Associations,嗨,我正在制作一个小网站来帮助我和朋友们学习语言。 典型用途: 亚当是英国人,但正在学日语。 亚当可以通过写和提交用日语写的文章来练习日语。 亚当不能(不允许)提交任何用他的母语写的文章。 Adam可以阅读其他正在学习英语的用户的文章(用英语撰写) 我正试图思考如何对其进行建模,并证明其比标准rails更难。许多属于我习惯的关联 我需要像这样的功能 -show all articles written in adams native language @adam.native_language.

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

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

我正试图思考如何对其进行建模,并证明其比标准rails更难。许多属于我习惯的关联

我需要像这样的功能

-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

我需要一个用户,文章和语言模型。但是我如何将语言和用户模型联系起来呢?感觉语言应该与用户模型关联两次,一次是母语,一次是外语。

是的,你说得对。用户和语言之间的联系是双重的。使用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
类语言“User”,:foreign\u key=>“native\u language\u id” 有很多人:说第二语言的人,:class\u name=>“User”,:foreign\u key=>“second\u language\u id” 有很多:文章 结束 类用户“语言” 属于:第二语言,:class\u name=>“语言” 有很多:第二语言文章,:至=>:第二语言,:来源=>:文章 有很多:母语文章,:至=>:母语文章,:来源=>:文章 结束 类文章
像这样的方法应该行。

谢谢米兰,太好了!,这种类型的关联的名称是什么?用户和文章之间的关联通常被称为“has_many:through”。