• rails enum用于存储数据



    http://api.rubyonrails.org/classes/ActiveRecord/Enum.html

    新的项目中有一个字段是展示类型,可以用下拉框去做,用string存储具体的类型字段。

    尝试了一下把展示类型修改为integer,用Rails enum枚举来做。

    使用枚举(整型)来存储类似于下拉框选择的这类的值, 比起直接存储类型的字符串,能减少表中存储字段的大小。

    建表语句如下

    class CreateSubjects < ActiveRecord::Migration[5.0]
      def change
        create_table :subjects do |t| 
          t.string :title, limit: 40
          t.string :sub_title, limit: 40
          t.string :categories, limit: 30
          t.string :description, limit: 500 
          t.integer :status, limit: 1
          t.integer :type, limit: 1
          t.integer :use_default_image, limit: 1
          t.integer :has_ranking_list, limit: 1
    
          t.timestamps
        end 
      end 
    end

    model中定义了enum的字段值。

    class Subject < ApplicationRecord
    
      TYPES = [ :'变化标题描述', :'固定标题描述', :'播放器专题', :'无文案专题' ]
      enum type: TYPES
    
      self.inheritance_column = '_disable'
    end

    在console里修改当前type的值,rails会自动显示成对应的字符串

    [6] pry(main)> Subject.last.update_attribute :type, 2
      Subject Load (0.2ms)  SELECT  `subjects`.* FROM `subjects` ORDER BY `subjects`.`id` DESC LIMIT 1
       (0.2ms)  BEGIN
      SQL (0.4ms)  UPDATE `subjects` SET `type` = 2, `updated_at` = '2016-09-13 06:06:49' WHERE `subjects`.`id` = 3
      SQL (14.3ms)  INSERT INTO `versions` (`item_type`, `item_id`, `event`, `object`, `created_at`, `object_changes`) VALUES ('Subject', 3, 'update', '{"id":3,"title":"谢谢","sub_title":"1","categories":"1","description":"1","status":null,"type":1,"use_default_image":1,"has_ranking_list":1,"created_at":"2016-09-13T04:35:23.000Z","updated_at":"2016-09-13T04:35:23.000Z"}', '2016-09-13 06:06:49', '{"type":[1,2],"updated_at":["2016-09-13T04:35:23.000Z","2016-09-13T06:06:49.000Z"]}')
       (54.0ms)  COMMIT
    => true
    [7] pry(main)> Subject.last
      Subject Load (0.4ms)  SELECT  `subjects`.* FROM `subjects` ORDER BY `subjects`.`id` DESC LIMIT 1
    => #<Subject:0x00558622d04d98
     id: 3,
     title: "谢谢",
     sub_title: "1",
     categories: "1",
     description: "1",
     status: nil,
     type: "播放器专题",
     use_default_image: 1,
     has_ranking_list: 1,
     created_at: Tue, 13 Sep 2016 12:35:23 CST +08:00,
     updated_at: Tue, 13 Sep 2016 14:06:49 CST +08:00>

    而直接查询mysql会发现,这个字段里存的是2.

    $ bundle exec rails db -p
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 72
    Server version: 5.5.47-0ubuntu0.14.04.1 (Ubuntu)
    
    Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql> select * from subjects;
    +----+--------+-----------+------------+-------------+--------+------+-------------------+------------------+---------------------+---------------------+
    | id | title  | sub_title | categories | description | status | type | use_default_image | has_ranking_list | created_at          | updated_at          |
    +----+--------+-----------+------------+-------------+--------+------+-------------------+------------------+---------------------+---------------------+
    |  3 | 谢谢   | 1         | 1          | 1           |   NULL |    2 |                 1 |                1 | 2016-09-13 04:35:23 | 2016-09-13 06:06:49 |
    +----+--------+-----------+------------+-------------+--------+------+-------------------+------------------+---------------------+---------------------+
    1 row in set (0.00 sec)

    在_form中的代码如下

      <div class="form-group">
        <%= f.label :type, class: 'col-sm-2 control-label' %>
    
        <div class="col-sm-4">
          <%= f.select :type, Subject::TYPES %>
        </div>
      </div>

    在index和show页面直接读取数据就ok了

    <%= subject.type %>
  • 相关阅读:
    python 生成白画布,黑画布和指定颜色画布(纯白色图片或黑色图片或纯色图片)(python generate white, black or pure color canva)
    tomcat启动出现乱码
    nicstat命令安装与使用
    sar命令详解【转】
    使用 virtualBox 让虚拟机连接外网
    跟面试官侃半小时MySQL事务,说完原子性、一致性、持久性的实现【转】
    jmeter的HTML Link Parser链路解析器的使用方法
    Jmeter导入badboy的jmx文件后,使用后置处理器的正则表达式提取器提取URL论坛板块ID失败
    Jforum中文版本不能发帖的问题
    部署JForum 2.1.9安装时遇到的问题:报错数据库问题
  • 原文地址:https://www.cnblogs.com/iwangzheng/p/5868277.html
Copyright © 2020-2023  润新知