我有一本书模型,书的状态可以是新的, 老,非常。它既可以是NEW,也可以是OLD,也可以是OLD和VERY_OLD。我想要 保存数据库中的用户选择。你会怎么建议我实现这个?
我可以为Book条件创建一个新模型,但我觉得必须有更好的方法。
答案 0 :(得分:3)
如果我理解你的问题,那么一本书的状态有五种可能性:
假设我已经做到了,你可以通过ActiveRecord::Enum完成这项工作。这只需要向您的数据库添加一个新列,并且不需要新模型。
如果您还没有列,请先添加status
列:
# In a migration
add_column :books, :status, :integer
add_index :books, :status
(如果您不希望某本书具有无状态,则可能还需要将null: false
添加到行add_column
。)
然后将其添加到您的Book
模型中:
class Book < ActiveRecord::Base
enum status: [:new, :old, :very_old, :new_and_old, :old_and_very_old]
end
这会在Book上生成名为new?
,old?
,very_old?
等的方法。您可能希望覆盖这些方法。因此,如果状态为new?
以及new_and_old
,则new
会返回true:
def new?
status == "new" || status == "new_and_old"
end
另一种方法是将boolean列添加到名为new
,old
和very_old
的书中,但这需要您添加一堆验证(例如确保一本书不能同时“新”和“非常旧”。)