0

假设用户 Bob 想要跟踪他每天的膳食卡路里,目前是早餐、午餐、晚餐和零食。所以我在铁轨内做了一张桌子,里面有四列(早餐、午餐、晚餐、小吃),鲍勃每天都会毫无问题地输入每餐的卡路里。几天后,Bob 决定要包含 brunch,所以我的第一个想法是写一个新的迁移添加到 brunch 列中,如果这是一个非常小的应用程序并且这种更改很少发生,这很好,但是如果该应用程序将被多人使用,并且每个人都想添加自己的用餐时间名称,我该怎么办?

当然迁移不是办法,因为这需要开发人员每次都介入并修改 Rails 应用程序,这可能每天多次。那么,有没有办法在 Rails 应用程序中执行此操作,这是 activerecord 的限制,还是不应该这样做?

4

1 回答 1

3

为此,您可以添加一个新表,例如具有列 id 和 food_type 的“lookup_food_types”。我假设您将卡路里保存在名为“卡路里”的表格中。现在在卡路里表中,您需要进行一些修改。它的列将是“id、user_id、lookup_food_type_id”。

所以在你的 LookupFoodType 模型中,

attr_accessible :food_ype
has_many :calories

在你的卡路里模型中,

attr_accessible :user_id, :lookup_food_type_id
belongs_to :lookup_food_type

在 lookup_food_types 表中,您最初需要添加一些记录,就像

 id food_type
-----------------
 1  breakfast
 2  lunch
 3  dinner
 4  snack

现在这是每个用户的基本食物类型。如果用户想在基本 food_types 旁边添加新的食物类型,那么您可以在卡路里表中添加一个名为“custom_food_type”的新列

在用户要添加卡路里的表单中,您需要将卡路里显示为输入,并将 food_type 显示为选择框。如果用户想添加自己的食物类型,还有一个按钮。单击该按钮后,“custom_food_type”的文本字段将可见。但条件是,该用户不应从基本列表中选择任何类型的食物类型。您可以通过使用 jquery 来实现它。

希望它能解决你的问题。

于 2013-08-08T05:27:58.877 回答