2017-01-30 221 views
0

在軌道4枚舉值,我創建了一個叫做書的枚舉是無法獲取數據庫

enum books_category: { 
    horror: 1, 
    mystery: 2, 
    drama: 3 
} 

我在數據庫叫做書列在這裏我使用CSV文件填充它。我的數據庫屬性是名稱和books_category。現在,當我升級到rails 5時,數據庫的books_category屬性直接映射到字符串而不是整數。例如,之前的books_category在升級之後由1保存字符串「horror」。我該如何解決這個問題?

回答

0

您可以使用兩種方式。

1)創建模式升其中在它節省business_categorie秒。

2)在檢索該存儲恐怖記錄,則可以將其傳遞給像

my_model = Model.find_by( 「business_categot =?」, 「恐懼」 的模式) Model.books_category [my_model.books_category]#返回整數值

+0

我要保存的整數值,而不是查詢數據庫,尋找整數值。可能嗎? – Mathew

+0

保存之前,它有一個查詢,並將整數值存儲在一個變量中,然後使用該值保存數據。 – VK29

0
  1. 首先,你缺少的書後,一個冒號s_category。代碼應該是這樣的:

    enum books_category: { 
        horror: 1, 
        mystery: 2, 
        drama: 3 
    } 
    
  2. 請編輯您的問題,包括books_category屬性的數據類型。

  3. 您可以使用字符串或整數

    book = Book.last 
    book.books_category = 1 
    book.save! 
    => book.books_category = "horror" 
    
    book = Book.last 
    book.books_category = 'drama' 
    book.save! 
    => book.books_category = "drama" 
    

    請注意,Rails的總是返回,即使它們被保存在整數數據類型,將字符串值更改值。

  4. 你可以通過調用

    Book.book_categories 
    => {"horror"=>1, "mystery"=>2, "drama"=>3} 
    

    得到所有books_categories的哈希值,並通過調用

    Book.book_categories.keys 
    => ["horror", "mystery", "drama"] 
    

    Book.book_categories.values 
    => [1, 2, 3] 
    
  5. 最後鍵和值,就可以得到所有類別爲的對象(書籍)的列表與

    Book.horror 
    => Book Load (0.1ms) SELECT "books".* FROM "books" WHERE "books"."books_category" = ? [["books_category", 1]] 
    

    正如您可以從查詢中觀察到的,它使用整數來搜索書籍。

  6. 如果你真的想要你的枚舉值,可以考慮使用Enumerize寶石。這是簡單的,並提供了更多的靈活性

延伸閱讀:https://hackhands.com/ruby-on-enums-queries-and-rails-4-1/