2017-04-17 32 views
0

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它不起作用。事實上,它不允許我分配任何值。可以是0,1,2,3或'text','emergency'等。

我試着將函數名改爲type,它工作的很完美。

甚至可以使用相同的函數名稱嗎?或者我必須改變它到別的東西?

回答

3

只需使用軌道enum代替(但請記住,你需要用符號代替字符串):這種方式在DB 0值映射到應用程序中的:text值,1

enum chat_type: %i(text callback emergency charge) 

validates :chat_type, inclusion: { in: chat_types.keys } 

:callback值等等。

enum documentation

相關問題