web-dev-qa-db-ja.com

Rails / ActiveRecordの列名に疑問符文字を使用する

ブールメソッドで疑問符を使用するというRubyのイディオムに沿って(例:person.is_smart?)、RailsのActiveRecordフィールドにも同じことをしたいと思います。

Rails generate model Person is_smart?:boolean

私は実際に上記のステートメントを実行していません。データベースフィールドに疑問符を含めることはできないと思います。 Railsはこれを適切に処理しますか?モデルから疑問符を単に残すのがベストプラクティスですか?

Rails 3.2.8を使用する

36
at.

smart?という名前のフィールドがある場合、Railsはメソッド'smart'を自動的に生成します。

83
cdesrosiers

モデルで: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 を参照してください。

3
lacostenycoder

実際、私は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
0
MCB