如何转换模型中的整数列以在视图中用作字符串

时间:2012-09-03 04:09:02

标签: ruby-on-rails view model

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

例如,如果我在表单中收集“payment_method”值为整数,如下所示:

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

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

<%= @relevantvariable.payment_method %> 

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

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

3 个答案:

答案 0 :(得分:2)

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

设置关联后,您就可以参考付款方式的名称:

<%= @relevantvariable.payment_method.name %> 

请勿尝试手动处理名称/ ID列表 - 很快就会无法管理。

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

答案 1 :(得分:2)

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

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

您可能希望使用开关/案例,但您明白了

正如我所说,我认为你应该坚持使用cheeseweasel解决方案,因为这种方法有很多问题......这是你的电话

答案 2 :(得分:1)

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

class User < AR::Base
   has_one :payment_method
end

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

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

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

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

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