2011-05-29 119 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