1

文字列を「表す」整数であるデータベース列の場合、文字列値をビューに表示する最良の方法は何ですか?

たとえば、次のようにフォームで「payment_method」値を整数として収集するとします。

<%= f.select :payment_method, { "Visa" => "1", "Mastercard" => "2", "Amex" => "3"} %>

保存された整数をビュー ファイルの文字列として表示するにはどうすればよいですか? モデルに何を追加できるか

<%= @relevantvariable.payment_method %> 

または同様のものは、それぞれの整数値の代わりに「Visa」、「Mastercard」、「Amex」などの文字列値を返しますか?

このような基本的な質問を処理していただきありがとうございます。

4

3 に答える 3

2

私はチーズウィーゼルのソリューションに固執しますが、あなたの見解でそれを示すためにできることが1つあります...

<% if @relevantvariable.payment_method == 1 %>
<%= "Visa" %>
<% else %>
<%= "Mastercard" %>

おそらく代わりにスイッチ/ケースを使用したいと思うでしょうが、あなたはアイデアを得ました

私が言ったように、このアプローチには多くの問題があるため、チーズウィーゼルソリューションに固執する必要があると思います...それはあなたの呼びかけです

于 2012-10-08T14:42:34.187 に答える
2

整数値を使用せず、支払い方法を文字列としてデータベースに直接保存するか、PaymentMethod モデルを作成します。

関連付けを設定すると、支払い方法の名前を次のように参照できるようになります。

<%= @relevantvariable.payment_method.name %> 

名前/ID のリストを手動で処理しようとしないでください。すぐに管理できなくなります。

編集:コメントを読んだ後、最初のオプションを使用してテーブルに文字列を保存した場合、ユーザーが値を直接入力することを絶対に許可しないでください。モデル(または同様のもの)のリストを維持して、ドロップダウンから、そのようにして、可能な値を制限しています。データベースに何を入れるかを確実にしたい場合は、カスタムバリデーターを追加することもできます。

于 2012-09-03T04:41:42.343 に答える
1

したがって、別のテーブルに支払い方法がpayment_methodsあり、所有者(ユーザーなど)にはhas_oneそれとの関係が含まれています

class User < AR::Base
   has_one :payment_method
end

次に、支払い方法の名前を表示します

<%=
    @user.payment_method.name #or whatever you have. 
%>

ただし、データのロード中にby@userを実行できます。お気に入りeager loading:include

User.find(user_id, :include => :payment_method)

PaymentMethodこれにより、単一のクエリで複数のユーザーの場合でも、データがより早く読み込まれます。

于 2012-09-03T04:54:03.353 に答える