我正在更新一个系统,使其具有更规范化的数据库模式。目前,我们有一个包含user列的builds表,该列将用户名存储为文本。我想添加一个user_id列和一个users表,并让some_build.user返回用户模型。到目前为止非常简单。
不幸的是,这个代码库上的测试并不像您希望的那样彻底。如果我们必须回滚更改,我希望继续填充旧的user列。我试着把这个放到build.rb里
alias_attribute :legacy_username, :user
before_save do
if changed_attributes.keys.include? 'user_id'
legacy_username = user.name
end
end我希望它能写到user专栏,而让Build#user指向User模型。不幸的是,legacy_username最终给user方法起别名,而不是给user列起别名--也就是说,some_build.legacy_username返回一个User,并且before_save挂钩不成功。
有没有办法在保留所有名为user的内容的同时对其进行协调,或者我需要重命名某些内容?
发布于 2016-11-05 01:14:49
啊哈!原来您可以使用ActiveRecord::Base#[]=直接设置数据库值
before_save do
if changed-attributes.keys.include? 'user_id'
self[:user] = username
end
end不需要别名。
https://stackoverflow.com/questions/40427047
复制相似问题