Ruby on rails Rails中具有共享接口的多个模型
我不确定Rails中针对特定情况的最佳结构。我们有几种类型的车间。无论车间类型如何,车间的管理都是相同的,因此车间的数据在单个模型中。我们收集参与者对研讨会的反馈,每种类型的研讨会的问卷都不同。我想从车间模型中获取有关车间的反馈,但关联模型的类别将取决于车间的类型。如果我在Rails以外的其他地方做这件事,我会为WorkshopFeedback建立一个抽象类,然后为每种类型的研讨会创建子类:WorkshopFeedbackOne、WorkshopFeedback二、WorkshopFeedback三。我不确定如何用Rails最好地处理这个问题 我目前有:Ruby on rails Rails中具有共享接口的多个模型,ruby-on-rails,models,modeling,Ruby On Rails,Models,Modeling,我不确定Rails中针对特定情况的最佳结构。我们有几种类型的车间。无论车间类型如何,车间的管理都是相同的,因此车间的数据在单个模型中。我们收集参与者对研讨会的反馈,每种类型的研讨会的问卷都不同。我想从车间模型中获取有关车间的反馈,但关联模型的类别将取决于车间的类型。如果我在Rails以外的其他地方做这件事,我会为WorkshopFeedback建立一个抽象类,然后为每种类型的研讨会创建子类:WorkshopFeedbackOne、WorkshopFeedback二、WorkshopFeedbac
class Workshop < ActiveRecord::Base
has_many :workshop_feedbacks
end
class Feedback < ActiveRecord::Base
belongs_to :workshop
has_many :feedback_ones
has_many :feedback_twos
has_many :feedback_threes
end
class FeedbackOne < ActiveRecord::Base
belongs_to :feedback
end
class FeedbackTwo < ActiveRecord::Base
belongs_to :feedback
end
class FeedbackThree < ActiveRecord::Base
belongs_to :feedback
end
课堂研讨会
这似乎不是访问车间模型反馈的最干净的方式,因为访问正确的反馈需要对车间类型进行逻辑调查,然后选择@workshop.feedback.feedback\u one
有没有更好的方法来处理这种情况?使用多态关联进行反馈会更好吗?或者使用模块或Mixin作为共享反馈接口
注意:我在这里避免使用单表继承,因为FeedbackOne、FeedbackTwo、FeedbackThree模型不共享太多公共数据,所以我最终会得到一个包含STI的大型稀疏表 您可以对模型进行子分类,如下所示:
class Workshop < ActiveRecord::Base
has_many :feedback_ones
has_many :feedback_twos
has_many :feedback_threes
#has_many :feedbacks # This MIGHT work, but is untested. I'm not at a dev setup to try.
end
class Feedback < ActiveRecord::Base
belongs_to :workshop
has_many :feedback_ones
has_many :feedback_twos
has_many :feedback_threes
end
class FeedbackOne < Feedback
belongs_to :feedback
end
class FeedbackTwo < Feedback
belongs_to :feedback
end
class FeedbackThree < Feedback
belongs_to :feedback
end
课堂研讨会
这可能是一个更好的解决方案,而且更干净。您的
反馈
表需要有一个类型
列,用于将一个表用于多个类。对的概念进行了很好的基本介绍。您可以对模型进行子类化,如下所示:
class Workshop < ActiveRecord::Base
has_many :feedback_ones
has_many :feedback_twos
has_many :feedback_threes
#has_many :feedbacks # This MIGHT work, but is untested. I'm not at a dev setup to try.
end
class Feedback < ActiveRecord::Base
belongs_to :workshop
has_many :feedback_ones
has_many :feedback_twos
has_many :feedback_threes
end
class FeedbackOne < Feedback
belongs_to :feedback
end
class FeedbackTwo < Feedback
belongs_to :feedback
end
class FeedbackThree < Feedback
belongs_to :feedback
end
课堂研讨会
这可能是一个更好的解决方案,而且更干净。您的
反馈
表需要有一个类型
列,用于将一个表用于多个类。我认为最好的解决方案是创建一个抽象类研讨会,以及3个子类Workshop1、Workshop2和Workshop3
因此,每个都将有一组反馈,反馈1到工作区1,反馈2到工作区2
您可以按如下方式更改子类中的声明:
class Workshop1 < Workshop
has_many :feedbacks, :class_name => "Feedback1"
end
class Feedback1 < ActiveRecord::Base
belongs_to :workshop, :class_name => "Workshop1"
end
班级车间1<车间
有很多:反馈,:class\u name=>“反馈1”
结束
类反馈1“车间1”
结束
并且在您的应用程序中,可以使用workshop.feedbacks和feedbacks.workshop,无论workshop或feedback的实例属于哪个类
编辑:您有三种类型的研讨会,信息相同,但每个研讨会都有特定类型的反馈。因此,最好将STI用于研讨会,而不是反馈。我认为最好的解决方案是创建一个抽象类研讨会,以及3个子类Workshop1、Workshop2和Workshop3 因此,每个都将有一组反馈,反馈1到工作区1,反馈2到工作区2 您可以按如下方式更改子类中的声明:
class Workshop1 < Workshop
has_many :feedbacks, :class_name => "Feedback1"
end
class Feedback1 < ActiveRecord::Base
belongs_to :workshop, :class_name => "Workshop1"
end
班级车间1<车间
有很多:反馈,:class\u name=>“反馈1”
结束
类反馈1“车间1”
结束
并且在您的应用程序中,可以使用workshop.feedbacks和feedbacks.workshop,无论workshop或feedback的实例属于哪个类
编辑:您有三种类型的研讨会,信息相同,但每个研讨会都有特定类型的反馈。因此,最好将STI用于研讨会,而不是反馈。我应该在我的原始帖子中指出,我不想使用STI,因为不同的反馈并不共享许多领域,我应该在我的原始帖子中注意到,我不想使用STI,因为不同的反馈不会共享很多字段,所以我最终会得到一个填充稀疏的大表。