对于“表示”字符串的整数的数据库列,在视图中显示字符串值的最佳方法是什么?
例如,如果我在表单中收集“payment_method”值为整数,如下所示:
<%= f.select :payment_method, { "Visa" => "1", "Mastercard" => "2", "Amex" => "3"} %>
如何在视图文件中将保存的整数显示为字符串?我可以将哪些内容添加到我的模型中,以便
<%= @relevantvariable.payment_method %>
或类似的东西返回字符串值,如“Visa”,“Mastercard”或“Amex”而不是它们各自的整数值?
非常感谢你处理这样一个基本问题!
答案 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
数据。