2011-05-29 86 views
1

简而言之:我是新来的铁轨,我正在寻求一些关于修正方式来关联模型的帮助。搞清楚Rails协会

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

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

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

  3. 每个分配给提交的审阅者然后为该特定提交撰写评论,其中包含决定(接受/拒绝)和一些反馈。

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

  5. 然后用户可以选择提交新版本进行审议,并从第2步

问题重复这个过程:

所以,首先提交的has_many版本belongs_to的一个提交,我已经实施并且工作正常。

我想知道应该如何构造其余部分。那些你们的经验可以分享你对我接下来要做的事情的想法吗?

  • 我最初认为提交has_many审阅者。但它似乎实际上应该是相反的 - 审稿人被分配了许多提交。举例来说,这有点像赋予个人审阅者许可评论特定帖子。这是一个正常的has_many关系吗?我一直在阅读http://guides.rubyonrails.org/association_basics.html,它似乎也可能是一个has_and_belongs_to_many。

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

  • 此外,我想审查应该有一些reviewer_id种类,如果字段,所以我们知道是谁写的。这应该是评论has_one评论者。

顺便说一句,我不想​​过于贫穷,但它是绝对精彩,如果有人可以提供一些深入的审阅控制器代码所需要的几行一个管理员指定他/她提交。

干杯,

+0

更新了我的帖子,请看下图。 – dombesz 2011-05-29 18:45:28

回答

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维特的建议使用devise宝石到你的用户进行身份验证。

+0

这个实现的一个区别是你需要为每个版本分配审阅者。 – 2011-05-29 10:36:01

+0

非常感谢。事实证明,为每个版本分配审阅者无论如何都可能更好。在相关说明中,在评论控制器中,我得到相关版本,因为它只能通过版本创建。要获得相关评论者,是否需要实施类似登录用户的操作来从中提取数据? – mmmdreg 2011-05-29 13:22:51

+0

看看Devise – 2011-05-29 15:21:45

1

你需要一个多到多加入提交和审阅之间的模式。你可以称之为一个分配:

  • belongs_to的:提交
  • belongs_to的:审稿
  • 的has_many:评论

随后的审查模式可能是:

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

我想给你所需要的一切。

+0

谢谢你。在提交和审阅者之间使用连接模型而不是使用has_and_belongs_to_many的原因是什么? – mmmdreg 2011-05-29 09:31:04

+0

我从来没有真正使用过HABTM,它总是让人困惑。如果您想要具有其他属性(例如时间戳)或进行分配的管理员的记录,则需要使用显式连接模型。 (根据Rails文档,HABTM用于支持这种行为,但现在不推荐使用它:“强烈建议您将任何具有属性的关联升级为真正的连接模型。”) – 2011-05-29 09:38:28

+0

感谢您的解释 - 理所当然。一旦我得到这个工作,我会好好接受你的答案=) – mmmdreg 2011-05-29 09:57:27