1

Rails でブール値をチェックしようとしているときに問題に直面しています。以前は、1 または 0 に対してブール値をチェックしていた私の条件が機能していました。しかし、最近、これがうまくいかなくなりました。

それらを mysql レベルでチェックすると、ブール値は値 1 と 0 の tinyint(1) として保存されます。

Earlier comparison logic
is_admin == 1

(最近の問題のため) 1 と 0 の代わりに true と false をチェックすると、うまくいきます。なぜこれが以前に失敗しなかったのかはわかりません。

Current comparison logic
is_admin == true

また、Rails のコンテキストでは常にブール列の比較を true または false に対して行うべきか、1 と 0 に対して行うべきかについて、100% 確信があるわけではありません。

誰でもこれに光を当ててください。

その過程で私が気づいたことの 1 つは、以前の比較では、たとえば 1 (整数) と true (実際のブール値) が false に評価されていたことです。これは理解できるようになりましたが、以前はこのロジックがどのように機能していたのか、まだ理解できていません。

これについての洞察は役に立ちます。Rails でこの種のチェックを行うためのベスト プラクティスを推奨してください。ありがとうございました。

4

3 に答える 3

0

@Max Williamsが述べたように、異なるデータベースはブール値を異なる方法で保存します。

MySQL はそれらを0またはとして保存します。したがって、1呼び出すis_admin == trueと true が返され、呼び出すis_admin == falseと false が返されます。

そして、それPostgreSQLに関しては、多くの方法があります

の場合true、有効な値は次のとおりです。

TRUE,'t','true','y','yes'and '1'

の場合false、有効な値は次のとおりです。

FALSE,'f','false','n','no' and '0'

注:ブール値が と にどのように格納されるかを比較しMySQLPostgreSQLところ、混乱が解消されました。

于 2014-05-16T15:09:16.863 に答える