如何在MySQL / Rails中获取列的随机默认值
假设我有一个充满颜色值的mysql表,如“#EE3AA”。 我有一个具有颜色属性的模型,这是必须的(应该validation),但不一定需要由用户输入。 如果用户留空,我希望使用从另一个表中自动选择的随机值来填充它,但默认情况下并不总是相同的值。
我想,也许,我可以使用迁移来做到这一点,所以它是这样的:
... :default => "values of the color column of the Colors table".to_a.sample
就Ruby而言,我的想法可能不正确/合法。 在迁移文件中看到:default选项后,我认为每次创建模型时都会运行迁移文件。 但阅读米哈伊尔的评论,可能并非如此。 但无论如何,当用户没有提供任何表时,如何从另一个表中获取随机值?
迁移仅在您创建数据库或更改数据库结构时运行,而不是在保存新记录时运行。 Mikhail在建议before_save
回调时是正确的。 您可以在模型中执行以下操作:
class Model < ActiveRecord::Base before_save :set_empty_color_to_random_value def set_empty_color_to_random_value self.color = Color.order("RANDOM()").first.color if self.color.empty? end end
请注意, RANDOM()
适用于PostgreSQL和SQLite,但不适用于MySQL。 对于MySQL,您必须使用RAND()
。
- 由于“mysql2”gem,我无法运行“bundle update”
- Ruby on Rails – 无法加载这样的文件 – mysql2 / 2.2 / mysql2(LoadError)
- 显示用户每天在所有任务上花费的时间
- 如何在OS X 10.5.4下安装mysql ruby gem
- 使用SQL检索一组记录,然后使用Rails对它们进行排序
- 如何根据查询插入多行?
- 我应该使用ON DELETE CASCADE,:dependent =>:destroy,还是两者都使用?
- MySQL / Rails性能:一个表,多行与多表,少行?
- LOAD DATA LOCAL INFILE使用mysql2 gem导致格式错误的数据包错误