找出Rails关联

时间:2011-05-29 08:15:08

标签: ruby-on-rails ruby ruby-on-rails-3 associations

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

背景:我正在研究管理学术期刊审核流程的系统。这个过程是这样的:

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

  2. 一个或多个审稿人被分配到提交。

  3. 分配给提交内容的每位审稿人然后为该特定提交内容撰写审核,其中包含决策(接受/拒绝)和一些反馈。

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

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

  6. 问题

    首先,Submissions has_many Versions belongs_to一个提交,我已经实现了它并且工作正常。

    我想知道其余部分应该如何构建。那些你更有经验的人可以分享你对我认为我接下来会做什么的看法吗?

    • 我最初认为提交有很多评论家。但它似乎应该是另一种方式---审稿人被分配了许多提交。为了说明,这有点像允许个人审稿人对特定帖子发表评论。这是一个正常的has_many关系吗?我一直在阅读http://guides.rubyonrails.org/association_basics.html,看起来它也可能是一个has_and_belongs_to_many。

    • 每个版本都有很多评论,因此版本has_many评论和评论belongs_to版本。

    • 此外,我想评论应该有一些reviewer_id类型如果字段,所以我们知道谁写了它。这应该是一个评论has_one Reviewer。

    顺便说一句,我不想​​太需要,但如果有人能够提供一些管理员将他/她分配给提交所需的Reviewer控制器代码行,那么这将是绝对精彩的。

    干杯,

2 个答案:

答案 0 :(得分:1)

您需要在提交和审阅者之间建立多对多连接模型。你可以称之为分配:

  • belongs_to:submission
  • belongs_to:reviewer
  • has_many:评论

然后,Review模型可以是:

  • belongs_to:allocation
  • belongs_to:version
  • 评论
  • 决定
  • 反馈

我认为这可以满足您的一切需求。

答案 1 :(得分:1)

我会做这样的事情:

#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来验证您的用户。