2016-03-02 191 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'模型中完成? –

相关问题