chats
架构:
create_table "chats", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.integer "chat_type", limit: 2, null: false
t.text "message", limit: 65535
t.text "attachment_url", limit: 65535
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
chat.rb
:
class Chat < ApplicationRecord
TYPES = %w(text callback emergency charge)
validates :chat_type, :inclusion => { :in => 0...Chat::TYPES.size}
def chat_type
Chat::TYPES[read_attribute(:chat_type)]
end
end
chat_type
属性是数据库中的整数。所以我使用TYPES
常量和chat_type
函数(相同的名称以便于使用)将其映射到其相应的字符串值。
现在,当我尝试验证chat_type
时,它不起作用。事实上,它不允许我分配任何vaalue。无论是0,1,2,3还是'文字','紧急'等等。
我尝试将函数名称更改为type
,但效果非常好。
甚至可以使用相同的功能名称吗?或者我是否必须将其更改为其他内容?
答案 0 :(得分:3)
只需使用rails enum
(但请记住,您需要使用符号而不是字符串):
enum chat_type: %i(text callback emergency charge)
validates :chat_type, inclusion: { in: chat_types.keys }
这样,db中的0
值被映射到应用程序中的:text
值,1
到:callback
值,依此类推。