Rails架构,更好地创建新模型或为现有模型添加布尔值?

时间:2013-04-08 12:46:45

标签: ruby-on-rails ruby-on-rails-3 model

我有一篇文章模型article.rb(带有相关图片):

attr_accessible:name,:content,:image_ids,:altname1

我现在想要创建另一种仅适用于城市的文章。它们将出现在网站的完全不同的部分,与所有其他文章无关。但模型完​​全一样。

创建新模型cityarticle.rb是否更好?或者更好的方法是将新的布尔列(具有true和false的cityarticle作为选项)添加到现有文章模型中。然后我会向控制器添加一个新动作:

def cityarticles
  @cityarticles = Article.where("cityarticle = ?", true)
end

对我而言,保留一个模型更容易,但新模型可能有充分的理由?表现怎么样?

2 个答案:

答案 0 :(得分:1)

新模型代表系统上的新“实体”。

  

Say CityArticles延伸文章

它应该是代码清晰度和可扩展性的新模型,以增加“CityArticles”的功能。

您可以制作新的表格支架或迁移:

  

rails g scaffold CityArticles参考:文章

或制作文章类polimorfic协会。阅读http://teachmetocode.com/articles/ruby-on-rails-what-are-polymorphic-associations/

答案 1 :(得分:1)

要问自己一些问题:这些类型的文章在哪些方面会有所不同?不同的人有权创建/编辑/删除它们吗?如何创建城市文章而不是将其意外保存为非城市文章,反之亦然?我是否使用attr_accessible或strong_parameters来阻止用户使用传入的params覆盖文章类型?不同的类型会有不同的验证规则(可能需要城市文章的城市名称)吗? 获得我想要的文章有多难?我有多大可能忘记指定要展示哪些文章并展示所有这些文章?

根据对这些问题的回答,您应该能够确定哪种数据结构最适合您。如果您使用Rails的STI模式,您可以使用一个表但两个不同的模型作为一个解决方案。性能可能不是主要考虑因素,但如果两种类型的文章永远不会被一起查询,那么在性能方面可能会稍微好一点,将它们分成不同的表格。