ロケール
Rails ロケールを使用することをお勧めします。これらを使用すると、変数の言語テキストを定義できます。たとえば、英語を話す人には「はい」/「いいえ」、フランス語を話す人には「Oui」/「Non」と言うことができます。
また、ロケールは一般的なソース コードから独立しているため、高速で柔軟で、簡単に変更できます。ロケールによって、ソース コード ロジックとレンダリングするテキストが非常にうまく分離されることがわかります。
例:
#./config/locales/en.yml
en:
TrueClass: "Yes"
FalseClass: "No"
#./app/views/items/index.html.erb
The value is <%= translate(myboolean.class) %>
The translate method can be abbreviated like this <%= t myboolean.class %>
ヘルパー
他の人がヘルパーを使用して次のようにコーディングしているのを目にするでしょう:
#./app/helpers/application.rb
def yesno(x)
x ? "Yes" : "No"
end
# ./app/views/items/index.html.erb
<%= yesno(myboolean) %>
または、定数を使用して次のようにします。
#./app/helpers/application.rb
YESNO = {true: "Yes", false: "No"}
# ./app/views/items/index.html.erb
<%= YESNO[myboolean] %>
これらはどちらも PHP に似た簡単で汚いソリューションです。それを行うためのより良い方法があります。
モンキーパッチ
Rails (または Ruby): Yes/No の代わりに True/Falseという質問について尋ねました。
# ./app/lib/extensions/true_class.rb
class TrueClass
def yesno
"Yes"
end
end
# ./app/views/items/index.html.erb
<%= myboolean.yesno %>
これは、Ruby クラスの「モンキー パッチ」と呼ばれます。一般に、やろうとしていることを実行するのは良い考えではありません。なぜだめですか?既存の Ruby クラスを壊して、そのメソッドをすべてのコードに強制するからです。これはまれなケースでは問題ないかもしれませんが(私見)、モンキーがビューテキストをロジッククラスにパッチする場合(これも私見)は間違いありません。
移行データ型はどうですか?
独自の移行データ型を作成することについては正しい一般的な考えがありますが、ブール値は yes/no の典型的な 1 対 1 の一致であるため、あなたのケースではやり過ぎかもしれません。独自のタイプを作成するのはいつですか? たとえば、あるデータベースではビット フラグを使用し、別のデータベースでは文字列列挙型を使用するなど、さまざまなデータベース プリミティブ型を使用して yes/no を保存する場合などです。
デコレータ
デコレーターは、あらゆるアプリの一般的な概念です。Rails では、デコレータは既存のモデルまたはクラスにビュー ロジックを追加する方法です。
Rails ロケールは基本的にデコレータです。
より高度なニーズには、使いやすい "Draper" と呼ばれる優れたデコレータ gem があります。デコレータを使用すると、ビュー コードが適切に整理され、適切に名前空間が設定され、テストしやすくなる傾向があります。