2017-01-30 215 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/