40

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

rails generate model Person is_smart?:boolean

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

Rails3.2.8の使用

4

3 に答える 3

94

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

于 2012-09-24T05:23:38.713 に答える
6

モデルで使用する場合に注意する1つの「落とし穴」: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

この方法がどのように機能するかを確認するには、railssourceを参照してください。

于 2018-04-05T10:24:06.093 に答える
0

実際、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
于 2014-01-20T21:08:35.193 に答える