2016-03-02 221 views
0

我已經搜索和搜索,發現只有部分解決方案,我當前的問題。Ruby on Rails has_many:通過多態關聯

事情是,我想知道是否有可能使用has_many:通過與Ruby on Rails中的多態關聯。

我有一個系統,students可以創建travel plans(可以屬於很多students)和refund claims(即只能屬於一個student)爲他們的項目。在這個系統中,admin usersstudents都能夠對計劃和索賠進行評論。

我的聯繫是:

class Student < ActiveRecord::Base 
    has_and_belongs_to_many :travel_plans 
    has_many :refund_claims 
    has_many :comments, through: :travel_plans 
    has_many :comments, through: :refund_claims 
end 

class AdminUser < ActiveRecord::Base 
    has_many :comments 
end 

class TravelPlan < ActiveRecord::Base 
    has_and_belongs_to_many :students 
    has_many :comments, as: :commentable 
end 

class RefundClaim < ActiveRecord::Base 
    belongs_to :student 
    has_many :comments, as: :commentable 
end 

class Comment < ActiveRecord::Base 
    belongs_to :commentable, polymorphic: true 
end 

我的問題是:

它是正確的Student模型comments兩次關聯?

我不想AdminUserstravel plansrefund claims,我怎麼能確定其comments作爲一個travel plan或在refund claim正在取得?

會有更好的方法嗎?

非常感謝大家!

乾杯,

回答

0

您可能想要爲Comment模型添加多態性author屬性。比你只需要has_many :comments, as: :authorStudentAdminUser模式。

如果這是一個新的應用程序,並且您開始在綠色領域,您可能需要重新考慮您的模型,並添加RoleUser模型。 Student將會是的role,如AdminUser那樣。

+0

嗨冬梅爾,感謝您的意見!是的,我從頭開始並預先徹底規劃了所有的關聯。我喜歡這個創建'角色'和'用戶'模型的想法,然後'角色'belongs_to:user'和'User''has_one:role',是否正確?但是,如果評論是在「travel_plan」或「refund_claim」中做出的,我仍然需要確定...或者我錯過了什麼? –

+0

我想我已經回答了我剛剛問過的問題:我必須在'Comment'模型中保留多態關聯並保證'User''has_many:comments',然後我可以跟蹤評論類型('travel_plan '或'refund_claim')和ID。最後,我想我不需要在'User'模型中使用'through:'。我的推理是否正確? –

+0

正確。順便說一句:請檢查(綠色複選標記)你喜歡的答案。 – wintermeyer

0

是否正確意見的學生模型兩次關聯?

不,不是真的。如果您有重複的關聯名稱,則只能使用其中的一個。如果你想同時使用,你必須以不同的方式命名它們。

+0

嗨馬雷克,感謝您的輸入!這是否意味着我可能需要兩個'comments'模型,比如說一個名爲'travel_comments',另一個名爲'refund_comments'?這真的是唯一的方法嗎? –

+0

不,您可以定義'travel_comments'和'refund_comments'關聯,並指定'model_name'和'foreign_key'選項,如果我沒有記錯的話。 –

+0

這個定義將在'Student'模型中完成? –

相關問題