弄清楚Rails的关联



简而言之:我是rails的新手,正在寻求一些关于关联模型的更正方法的帮助。

背景:我正在开发一个管理学术期刊评审过程的系统。这个过程是这样的:

  1. 用户提交包含版本的提交。提交的内容包含所有只需输入一次的内容(标题、求职信),而版本是提交供考虑的实际论文。

  2. 一个或多个审阅者被分配给一个提交。

  3. 分配给某个提交的每个评审员都会为该特定提交撰写一份评审,其中包括一项决定(接受/拒绝)和一些反馈。

  4. 管理员根据审核设置提交的状态(接受/拒绝)。

  5. 用户然后可以选择提交新版本以供考虑,并且从步骤2开始重复该过程。

问题

因此,首先,Submissions有属于Submission的_many Versions,我已经实现了它,它运行良好。

我想知道它的其余部分应该如何构建。你们这些更有经验的人能分享一下你们对我下一步该做什么的想法吗?

  • 我最初认为一个Submission有很多审核人。但看起来实际上应该是相反的——评审员被分配了许多提交的内容。举例来说,这有点像允许个别评论者对特定帖子发表评论。这是正常的夫妻关系吗?我一直在读书http://guides.rubyonrails.org/association_basics.html它似乎也可能是一个hasandbelongs_to_many。

  • 每个版本都有许多评论,因此版本有_多个评论,并且评论属于_版本。

  • 此外,我想Review应该有一些reviewer_id类型的if字段,这样我们就知道是谁写的。这应该是一个Review has_one reviewer。

顺便说一句,我不想太穷,但如果有人能深入了解管理员为他/她分配提交所需的几行审查员控制器代码,那将是一件非常棒的事情。

干杯,

我会这样做:

#reviewer.rb the user who reviews your versions
class Reviewer < ActiveRecord::Base
  has_many :reviews
end
#review.rb the actual review
class Review < ActiveRecord::Base
  belongs_to :reviewer
  belongs_to :version
  #usually put here a field called comment:string
end
class Version < ActiveRecord::Base
  has_many :reviews
  has_many :reviewers, :through => :reviews, :uniq=>true #this will give you the list of reviewers
  belongs_to :submission
end
class Submission < ActiveRecord::Base
  has_many :versions
end

如果你需要澄清,请告诉我。

更新

在许多情况下,您的审阅者可能是用户模型,因此您可以使用用户模型来代替审阅者,然后正确命名以保持关系的含义。这些变化是必要的。

class User < ActiveRecord::Base
  has_many :reviews
end
class Review < ActiveRecord::Base
  belongs_to :reviewer, :class_name=>'User'
  belongs_to :version
  #usually put here a field called comment:string
end

然后按照@Andy Waite的建议,使用devise gem对用户进行身份验证。

Submission和Reviewer之间需要一个多对多联接模型。你可以称之为分配:

  • belongs_to:提交
  • belongs_to:审阅者
  • has_many:评论

那么审查模型可以是:

  • belongs_to:分配
  • belongs_to:版本
  • 审查
  • 决定
  • 反馈

我认为这能提供你所需要的一切。

相关内容

  • 没有找到相关文章

最新更新