如何为不同行的列分配不同的值

时间:2011-05-06 10:19:52

标签: ruby activerecord migration

例如,有一个如下表:
Column_A Column_B Column_C

  1. 我想使用ruby migration
  2. 添加列D.
  3. 我有一个函数getColumnDValue(columnC)。此函数可以根据列C值
  4. 获取D列的值
  5. 我想根据列C值为列D分配不同的值。
  6. 如何做这些????

    我已检查过Update_All和Update。但是,它似乎对我的情况没用。 或者至少,我不知道如何使用这些方法来实现我的目的。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望能够以通常的方式设置d的值,如下所示:myobject.d = 5。根据c中的值,d将以正确的值保存。

这可以使用before_save过滤器来完成,您可以在其中为d。

设置新值

您还可以覆盖d:

的setter方法
def d=(value)
  write_attribute(:d, getColumnDValue(value))
end

使用第一种方法过滤器,您的对象将带有“无效”值,直到保存为止。如果覆盖setter,则新值将立即写入对象。由您决定哪种方法最适合您。