1

对于“表示”字符串的整数数据库列,在视图中显示字符串值的最佳方式是什么?

例如,如果我以整数形式收集“payment_method”值,如下所示:

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

如何在我的视图文件中将保存的整数显示为字符串?我可以在我的模型中添加什么,以便

<%= @relevantvariable.payment_method %> 

或类似的返回字符串值,如“Visa”、“Mastercard”或“Amex”,而不是它们各自的整数值?

非常感谢您处理这样一个基本问题!

4

3 回答 3

2

要么不使用整数值,直接将支付方式作为字符串存储在数据库中,要么创建一个 PaymentMethod 模型。

建立关联后,您可以这样引用付款方式的名称:

<%= @relevantvariable.payment_method.name %> 

不要尝试手动处理名称/ID 列表 - 这很快就会变得难以管理。

编辑:阅读您的评论后,如果您使用第一个选项并将字符串存储在表中,绝对不允许用户直接键入值,维护模型(或类似)列表,您为您的种子播种从下拉列表中,这样您仍然可以限制可能的值。如果您想确定将什么放入数据库,您甚至可以添加自定义验证器。

于 2012-09-03T04:41:42.343 回答
2

我会坚持使用cheeseweasel解决方案,但你可以做一件事来展示你的观点......

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

您可能想改用开关/外壳,但您明白了

正如我所说,我认为你应该坚持使用奶酪鼬鼠解决方案,因为这种方法存在很多问题......这是你的决定

于 2012-10-08T14:42:34.187 回答
1

因此,您将付款方式放在单独的表中payment_methods,并且所有者(例如用户)包含has_one与它的关系

class User < AR::Base
   has_one :payment_method
end

然后显示付款方式名称,就像

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

但是,在加载@user数据时,您可以执行eager loadingby :include。像

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

PaymentMethod即使对于具有单个查询的多个用户,这也会更早地加载数据。

于 2012-09-03T04:54:03.353 回答