2

RailsにはDjangoNullBooleanと同等の組み込みがあり、3つの値(nil、true、false)を受け入れますか?そうでない場合、どのように実装することをお勧めしますか?

私の場合、のテーブルOverridesとのテーブルがありObjectsます。Objects多くを持つことができますOverridesOverrides構造は。とほぼ同じですObjects。の値を読み取る前に、その値をObjectプルしOverrides、条件付きでそれらを選択してから、それらの値をに適用しますObject

nilのフィールドは、Override変更を適用しません。このシステムは私にとってはうまく機能していますが、ブールフィールドをに追加しただけObjectsなので、null許容のブール値をに配置する必要がありOverridesます。DjangoNullBooleanはこのタイプのシナリオではうまく機能しますが、同等のレールを見つけるのに問題があります。

4

2 に答える 2

5

ActiveRecord は、データベース内で null 可能性と型を分離します。:null => falseまた、列を作成/変更するタイミングを明示的に指定しない限り、ActiveRecord は列を null 許容として作成します。したがって、標準のブール列を作成できるはずです。

create_table "..." do |t|
  #...
  t.boolean "boolean_column"
end

次に、必要に応じて true/false/nil を割り当てます。

o.boolean_column = true  # true
o.boolean_column = false # false
o.boolean_column = nil   # null
于 2012-10-15T19:57:34.973 に答える
-2

Ruby では、nil.

条件ステートメントの場合、nilは として解釈されfalseます。

1.8.7 :001 > if nil
1.8.7 :002?>   0
1.8.7 :003?>   end
 => nil 
1.8.7 :004 > if false
1.8.7 :005?>   0
1.8.7 :006?>   end
 => nil 
1.8.7 :007 > if true
1.8.7 :008?>   0
1.8.7 :009?>   end
 => 0 
1.8.7 :010 > x = 0
 => 0 
1.8.7 :011 > if nil
1.8.7 :012?>   x = 1
1.8.7 :013?>   end
 => nil 
1.8.7 :014 > x
 => 0 
1.8.7 :015 > if false
1.8.7 :016?>   x = 1
1.8.7 :017?>   end
 => nil 
1.8.7 :018 > if true
1.8.7 :019?>   x = 1
1.8.7 :020?>   end
 => 1 
1.8.7 :021 > x
 => 1 
1.8.7 :022 > if 2 
1.8.7 :023?>   x= 2
1.8.7 :024?>   end
 => 2 
1.8.7 :025 > x
 => 2 

興味深いのはnil、Ruby で非値を実行trueすると、最後のケースのように解釈されることです。

于 2012-10-15T19:39:32.313 に答える