Ruby on rails 等级应用程序的ActiveRecord关联
标题有点难解释 我正在用Ruby on Rails制作一个测试等级的应用程序,但我想不出最好的ActiveRecord关联设置 理想情况下:有很多用户,并且有很多测试。我需要存储每个用户每次测试的分数。现在我有这个:Ruby on rails 等级应用程序的ActiveRecord关联,ruby-on-rails,database,database-design,activerecord,associations,Ruby On Rails,Database,Database Design,Activerecord,Associations,标题有点难解释 我正在用Ruby on Rails制作一个测试等级的应用程序,但我想不出最好的ActiveRecord关联设置 理想情况下:有很多用户,并且有很多测试。我需要存储每个用户每次测试的分数。现在我有这个: class User < ActiveRecord::Base has_many :tests has_many :scores, :through => :tests end class Test < ActiveRecord::Base has_
class User < ActiveRecord::Base
has_many :tests
has_many :scores, :through => :tests
end
class Test < ActiveRecord::Base
has_many :scores
end
class Scores < ActiveRecord::Base
belongs_to :users
belongs_to :tests
end
class用户:测试
结束
类测试
但这似乎并不正确。我想知道这方面的惯例。谢谢。我将使用三种表格/型号:
测试
用户
(或者更好的是,学生
)测试结果
,具有测试id
,用户id
和分数
class User < ActiveRecord::Base
has_many :tests, through: :test_results
end
class Test < ActiveRecord::Base
has_many :users, through: :test_results
end
class TestResult < ActiveRecord::Base
belongs_to :test
belongs_to :user
end
class用户
所以它的测试结果应该属于测试和用户?它是通过测试结果,而不是反过来,因为测试结果
是连接测试和用户的东西。这样想吧:我和任何一个考试有关系的唯一原因就是因为我参加了那个考试。如果我参加美国总统考试和内战考试,jason.tests
将返回这两个考试,而不是三角测试,因为我没有参加。希望这种思维方式能把问题弄清楚。顺便说一句,我认为这确实是一个数据库设计问题,Rails的ActiveRecord放在表的顶部这一事实是一个附带的细节。我不是在批评这个问题;我只是觉得指出这一点会很有趣。