我的模型中已经有一个日期字段(字符串)。我计划添加具有不同长日期格式的其他字符串字段,以用于与现有日期字段相关的文本搜索。这是为了方便视障者的文本搜索。
我之前做过类似的事情,之前工作得很好。
add_column :media_libraries, :media_year, :string, default: Time.now.year
但是,我想要做的是添加日期字段,并使用现有日期字段的值默认新日期字段。
我的一个视图中有以下代码,其中包含我想用来初始化新长日期字段值的字段。
media_created.to_date
我可以在迁移中执行此类操作,我可以根据记录中其他字段的值设置默认值吗?
add_column :media_libraries, :media_created_en, :string, default: :media_created.to_date.strftime("somedateformat")
我已阅读其他帖子add a database column with Rails migration and populate it based on another column,其中一个答案提示迁移中的查询。这将是我尝试实现这一点。然而,在Stack Overflow上发布的其他人认为在迁移中引用其他字段不是一个好主意。对我而言,因为这是一次性的事情,所以我并不担心这些问题。
MediaLibrary.update_all(media_created_en: :media_created.to_date.strftime("%B %d, %Y"), media_created_fr: :media_created.to_date.strftime("%d %B %Y"), media_created_pt: :media_created.to_date.strftime("%d %B %Y"), media_created_es: :media_created.to_date.strftime("%d de %B de %Y"))
我想对现有记录执行此操作,因为我有超过1000条记录需要更新。我将把代码放在我的模型或控制器中,以设置字段以便将来更新模型。
我到处寻找,但只能找到默认使用的内置函数或上面的一个例子。 API除了'options {}'之外什么也没说。如果无法做到这一点,我准备在我的应用程序的管理部分编写一个方法来执行此操作。
任何帮助将不胜感激。我会一直在寻找。
答案 0 :(得分:0)
我一直在研究,一无所获,所以我决定在迁移中尝试一些事情。我无法在默认值中成功地在模型上合并字段。由于我处于紧张状态,我决定在迁移中创建字段,然后在控制器中编写一个方法来更新模型中的字段。现在我将编写代码来更新正在添加的记录的字段,以确保字段正确更新。
如果有人为此提供解决方案,请在此发布,但我还在继续。