6

私はプログラミングの初心者ですが、私のアプリケーションでは、特定のケースで「true」または「false」ではなく「yes」または「no」を表示したいと考えています。これを行う最善の方法がわかりません。この質問を読みましたが、実装方法がよくわかりませんでした。誰かが私を助けることができますか?これを初期化子、ヘルパー、または他の場所に配置するのが最善でしょうか? はい/いいえを表示したい場所ならどこでもビューで何かを呼び出すことができるようにしたい、または代わりに、マイゲーションで t.boolean_yesno のようなものを作成してから、列ごとに作成できるカスタムデータ型を作成したいtrue を yes として、false を no として保存するだけです。

イニシャライザやヘルパーの経験がありません。ありがとう!

4

3 に答える 3

27

ロケール

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 があります。デコレータを使用すると、ビュー コードが適切に整理され、適切に名前空間が設定され、テストしやすくなる傾向があります。

于 2013-02-24T02:01:31.400 に答える
3

セットアップを取得する最も簡単なオプションは、アプリケーション ヘルパーに配置できるヘルパー メソッドを作成することです。

# in app/helpers/application_helper.rb

def boolean_to_words(value)
  value ? "Yes" : "No"
end

これは、次のような他の多くの Rails 変換ヘルパーに似ています。number_to_currency

于 2013-02-24T02:19:26.900 に答える