如何在rails应用程序中正确添加新列而不依赖于迁移?

时间:2013-08-08 05:14:03

标签: ruby-on-rails ruby database activerecord rails-activerecord

让我们说用户鲍勃想要每天记录他的膳食卡路里,目前是早餐,午餐,晚餐和小吃。因此,我在包含四列(早餐,午餐,晚餐,小吃)的铁轨中制作一张桌子,鲍勃每天每餐都加入卡路里,没有任何问题。几天之后,鲍勃决定要包括早午餐,所以我的第一个想法就是只写一个新的迁移添加到早午餐专栏,如果这是一个非常小规模的应用程序并且这种变化很少发生,这很好,但是如果应用程序将由多个人使用,每个人想要添加他们自己的食物时间名称,我该怎么办?

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

1 个答案:

答案 0 :(得分:3)

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

所以在你的LookupFoodType模型中,

attr_accessible :food_ype
has_many :calories

在您的Calory模型中,

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实现它。

希望它能解决你的问题。