virtual columns in mysql
source: drifting ruby eipsode87
场景:在数据库中创建一个字段,其他字段根据这个字段自动生成
MySQL5.7的sql代码如下:
CREATE TABLE triangle (
sidea DOUBLE,
sideb DOUBLE,
sidec DOUBLE AS (SQRT(sidea * sidea + sideb * sideb))
);
INSERT INTO triangle (sidea, sideb) VALUES(1,1),(3,4),(6,8);
mysql> SELECT * FROM triangle;
+-------+-------+--------------------+
| sidea | sideb | sidec |
+-------+-------+--------------------+
| 1 | 1 | 1.4142135623730951 |
| 3 | 4 | 5 |
| 6 | 8 | 10 |
+-------+-------+--------------------+
Rails中字段生成的方式如下:
rails g scaffold users name:string upper_name:virtual name_length:virtual
#migration.rb
class CreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users do |t|
t.string :name
t.virtual :upper_name, type: :string, as: "UPPER(name)"
t.virtual :name_length, type: :integer, as: "LENGTH(name)", stored: true
t.timestamps
end
end
end
#view
view中代码upper_name和name_length会自动生成,不用生成表单