0

我是 Rails 新手,我遇到了如何设置模型的问题。

  1. 我有一组模型:气球、油漆、刷子等。
  2. 它们具有共同的属性(如“名称”)
  3. 我希望他们有一个唯一的 id。那就是我希望如果有一个 id=NNN 的 Balloon 实例,那么Paint.find(NNN)Brush.find(NNN)返回 nil。

一个明显的解决方案是创建一个模型,比如Item,它继承了 Balloon、Paint 和 Brush 。但是这种方法有点味道,因为子类 Balloon、Paint 和 Brush 确实有很大不同。我唯一需要他们的是id属性在这些子类中是唯一的。

我听说过 Rails 中的组合和委托,但我不熟悉它们,所以我不知道解决问题的合理方法是什么。

4

3 回答 3

1

我认为您应该采用创建 Item 模型的解决方案。您希望 Balloon、Paint 和 Brush 具有相同的行为,因此它们应该继承它们的共同行为。你是对的,它们是不同的,这就是为什么你首先会有气球、油漆和画笔,而不是只使用你的物品模型。我认为这应该通过继承来解决。

于 2013-04-09T00:47:24.127 回答
0

我以这种方式解决了这个问题:

  1. 我确实介绍了模型项目。
  2. 我通过添加 :after_save 过滤器更新了模型 Paints 和 Brushes,该过滤器实际上将相应的信息保存到数据库 Item 中。

我不知道它是否是“我自己的自行车”,但它似乎可以工作。

于 2013-04-16T09:39:45.680 回答
0

为什么要与 Rails 斗争以使(任意)记录 id 在表中是唯一的?如果您想要跨多个模型的唯一标记,请创建一个虚拟属性(例如 vid),将“B”添加到气球记录的记录 id、“P”用于绘制、“R”用于刷子或其他任何内容。为每个接受这样一个 vid 的模型编写一个find(),如果该模型的 vid 错误,则返回 nil,否则发出find()带有记录 id 的 a。

于 2013-04-08T19:41:05.510 回答