如何在其他视图中显示Rails选择字段值而不是存储的整数

我在Rails应用程序中使用了一个未绑定到相关模型的选择字段,但为静态系列选项存储整数值,即

 

在show / index视图中,如果我想显示选项文本(即Option1,Option2等)而不是存储在数据库中的整数值,我该如何实现呢?

感谢您帮助一个菜鸟学习绳索!

编辑

根据Thorsten的建议,我实施了以下内容。 但它返回零,我无法弄清楚为什么。

发票模型:

 @@payment_status_data = { 1 => "Pending Invoice" , 2 => "Invoiced" , 3 => "Deposit Received", 4 => "Paid in Full"} def text_for_payment_status @@payment_status_data[payment_status] end 

发票显示视图​​:

 Payment Status:  

在控制台中:

 irb > i=Invoice.find(4) => [#] irb > i.text_for_payment_status => nil 

我已经尝试在键周围使用和不使用引号来定义哈希。 我错过了什么?

这样的事情会起作用:

 <%= form_for @my_model_object do |form| %> <%= form.label :column_name "Some Description" %> <%= form.select :field_that_stores_id, options_for_select({"text1" => "key1", "text 2" => "key2"}) %> <% end %> 

更新

如果您以后想要显示文本,可以从简单的哈希中获取它,如下所示:

 {"key1" => "text 1", "key2" => "text2"}[@my_object.field_that_stores_id] 

但是你最好将这个哈希存储在像模型这样的中心位置。

 class MyModel < ActiveRecord @@my_select_something_data = {"key1" => "text 1", "key2" => "text2"} def text_for_something_selectable @@my_select_something_data[field_that_stores_id] end end 

然后你可以在你的视图中使用它

 @my_object.text_for_something_selectable 

这有很多可能的变化。 但这应该有效,你可以把所有信息放在一个中心位置。

更新

好的,我在网站上使用了类似的东西。 我们需要为rma存储return_headers。 那些需要将返回原因存储为代码。 这些代码在外部MS SQL Server数据库中定义(网站用它来交换大量数据,如订单,产品等等)。 在外部数据库表中存储的返回原因比实际需要的多得多,所以我只拿出了一些。 还是要确保,代码是正确的。

所以他的模型如下:

 class ReturnHeader < AciveRecord::Base @@return_reason_keys = {"010" => "Wrong Produc", "DAM" => "Damaged", "AMT" => "Wrong Amount"} def self.return_reason_select @@return_reason_keys.invert end def return_reason @@return_reason_keys[nav_return_reason_code] end end 

模型当然包含更多代码,但这是重要的部分。 这里相关的是,散列中的键是字符串,而不是符号。

在视图中我使用它像这样:

在编辑表格中:

 <%= form_for @return_header do |form| %> <%= form.label :nav_return_reason_code "Return Reason" %> <%= form.select :nav_return_reason_code, options_for_select(ReturnHeader.return_reason_select, @return_header.nav_return_reason_code) %> <% end %> 

(也许没有最优雅的方式来做,但有效。不知道,为什么options_for_select期望散列是“text”=>“key”,但这就是为什么,为什么上面的类级方法返回反转的散列。 )

在我的索引操作中,返回原因列在其中一列中。 在那里,我可以简单地获得价值

 @return_headers.each do |rh| rh.return_reason end 

如果您无法运行它,请检查该键的类型和值是否正确。 也许在方法中使用logger.info添加一些调试信息,以查看那里使用的实际数据。