ブールメソッドで疑問符を使用するというRubyのイディオムに沿って(例:person.is_smart?
)、RailsのActiveRecordフィールドにも同じことをしたいと思います。
Rails generate model Person is_smart?:boolean
私は実際に上記のステートメントを実行していません。データベースフィールドに疑問符を含めることはできないと思います。 Railsはこれを適切に処理しますか?モデルから疑問符を単に残すのがベストプラクティスですか?
Rails 3.2.8を使用する
smart?
という名前のフィールドがある場合、Railsはメソッド'smart'
を自動的に生成します。
モデルで:enum
を使用した場合に注意すべき「落とし穴」があります。これは、値を整数として格納するためです。アクティブレコードによって提供される疑問符attrメソッドは、データベースで0または1をそれぞれfalse/trueとして評価することを想定しています。例えば:
class Person
enum mood: ['happy', 'sad', 'bored']
end
p = Person.new(mood: 'happy') # this would store mood as 0 in db
p.mood? #=> false
p.mood = 'sad' # saves as 1 in db
p.mood? #=> true
p.mood = 'bored' # saves as 2 in db
p.mood? #=> true
このメソッドがどのように機能するかを確認するには、 Rails source を参照してください。
実際、私はRails 4を使用していて、疑問符なしでブール列を呼び出すことはできません。
pry(main)> User.where(is_validated: false).first.is_validated
User Load (0.9ms) SELECT "users".* FROM "users" WHERE "users"."is_validated" = 'f' ORDER BY "users"."id" ASC LIMIT 1
=> nil
[13] pry(main)> User.where(is_validated: false).first.is_validated?
User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."is_validated" = 'f' ORDER BY "users"."id" ASC LIMIT 1
=> false