如何从购物清单中存储商品

时间:2014-04-28 21:55:57

标签: ruby-on-rails

我正在建立费用跟踪器

class ShoppingList
   has_many :items
end

class Item
end

但我不太确定,如何存放这些物品。到目前为止我的想法:

第一

Item.new(name: 'milk', price: 1)
Item.new(name: 'chocolate', price 2)

这很简单,但同样的事情可能最终会有不同的名称。

Item.new(name: 'biscuits', price: 3)
Item.new(name: 'cookies', price: 3)

第二

class Milk < Item; end
class Chocolate < Item; end

Milk.new(price: 1)

这感觉有点复杂,每次购买新东西时都必须添加一个类 - 另一方面,一旦完成 - 我想事情会更容易搜索。

解决这个问题的正确方法是什么?各自的优点/缺点是什么?

1 个答案:

答案 0 :(得分:0)

你的第一种方法肯定更有意义。如果你担心他们是名字的别名,你甚至可以包括另一个表

class Item
    has_many :alternate_names
end

然后在您必须创建的备用名称表中查找要保存的项目,并将该关系带回项目。所以对于输入名称:&#34;饼干&#34;,价格:3你可以做类似的事情

> alternatesearch = AlternateName.find_by(name: "biscuits")
   => #<AlternateName id: 5, item_id: 2, name: "biscuits">
> Item.find(alternatesearch.item_id)
   => #<Item id:2 name:"cookies" price:"3">

或者如果它是一个新项目,您可以在alternatesearch上使用find或create by,然后在创建它时创建一个新项目。我对你想要购物清单的确切内容感到困惑,或者你是想每次都添加新商品还是重复使用它们而是改变价格。

我认为这比第二种方法更好,因为第二种方法对它可能拥有的项目数量有很大的限制,你基本上会在rb类文件中保存你的数据库信息,这将使它变得非常困难改变。但我想这可能是一个优势,取决于你想拥有多少项目。