向帖子添加类别的最佳方法是什么 - Ruby on Rails博客

时间:2010-04-13 20:45:29

标签: ruby-on-rails ruby

我是Ruby和Rails的新手,请耐心等待。我创建了一个非常简单的博客应用程序,其中包含帖子和评论。一切都很好。关于添加类别的下一个问题。我想知道最好的方法。因为我不能在我面前看得太远但是当谈到Rails时我想我会问。

要明确的是,我希望一个帖子可以有多个类别,一个类别可以有多个帖子。

最好的方法是创建“类别”表,然后使用帖子和类别模型来has_many :postshas_many :categories吗?我是否还会设置routes.rb,以便将帖子嵌入到类别中?

或者通过简单地将类别列添加到现有的帖子表中是否有更简单的方法? (在这种情况下,我会想象有多个类别会很困难)。

2 个答案:

答案 0 :(得分:19)

这取决于您愿意付出多少努力 - 您可以使用标记插件,或在帖子和类别模型中设置has_and_belongs_to_many关系,但我推荐一些不同的东西。

如果您创建第三个模型“分类”,作为帖子和类别之间的一种“粘合剂”,您可以拥有更多控制权。发布has_many :categories :through => categorizations和类别has_many :posts :through => :categorizations

这样做的好处是您的类别不会存储在您的代码中,而是存储在数据库中 - 因此添加/删除/编辑它们不需要您修改任何源代码。如何设置路线完全取决于您 - 您可以/categories/:id返回属于该类别的所有帖子的列表,或使用一个或多个类别作为参数实现某种搜索表单。

Ryan Bates有一个excellent screencast解释所有这些,有几种不同的方法可以解决这个问题。

我知道你提到你是RoR的新手,所以如果这对你想要的东西有点复杂,我会道歉。正如我所说,插件可能最适合您的需求,但我发现如果可能的话,自己编写代码总是很好的,并且具有更多灵活性和控制的额外好处:)

答案 1 :(得分:8)

由于您希望类别和帖子之间存在多对多关系,我会(并且确实)使用标记插件,例如ActsAsTaggableOn,您可以在其中定义引用“标记”的内容,以及称之为“类别”。简单有效。在您的表单中,您可以为不同类别的白名单(例如“编码”,“食谱”,“假期”)限制“标签”的可能值。