在rails 4中,我创建了一个名为books的枚举
enum books_category: {
horror: 1,
mystery: 2,
drama: 3
}
我在数据库中有一个名为Books的列,我使用csv文件填充它。我的数据库属性是name和books_category。现在当我升级到rails 5时,数据库的books_category属性直接映射到字符串而不是整数。例如,之前books_category在升级之后由1组成,并保存字符串" horror"。我该如何解决这个问题?
答案 0 :(得分:0)
您可以使用两种方式。
1)创建模式 l,其中保存 business_categorie 。
或强>
2)当您检索存储恐怖的记录时,您可以将其传递给模型,如
my_model = Model.find_by(“business_categot =?”,“恐怖”) Model.books_category [my_model.books_category]#返回整数值
答案 1 :(得分:0)
首先,您在books_category之后缺少冒号。代码应如下所示:
enum books_category: {
horror: 1,
mystery: 2,
drama: 3
}
请修改您的问题以包含books_category
属性的数据类型。
您可以使用字符串或整数
更改值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总是返回字符串值,即使它们以整数数据类型保存。
您可以通过调用
获取所有books_categories
的哈希值
Book.book_categories
=> {"horror"=>1, "mystery"=>2, "drama"=>3}
通过调用
键和键值Book.book_categories.keys
=> ["horror", "mystery", "drama"]
和
Book.book_categories.values
=> [1, 2, 3]
最后,您可以获取具有horror
类别
Book.horror
=> Book Load (0.1ms) SELECT "books".* FROM "books" WHERE "books"."books_category" = ? [["books_category", 1]]
从查询中可以看出,它使用整数来搜索图书。
如果您真的想要枚举值,请考虑使用Enumerize gem。它更简单,并提供更多的灵活性
进一步阅读:https://hackhands.com/ruby-on-enums-queries-and-rails-4-1/