我在Rails应用程序中使用了一个未绑定到相关模型的选择字段,但存储了一系列静态选项的整数值,即
<%= select (:this_model, :this_field, [['Option1',1],['Option2',2],['Option3',3],['Option4',4]] ) %>
在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: <%= @invoice.text_for_payment_status %>
在控制台中:
irb > i=Invoice.find(4)
=> [#<Invoice id: 4, payment_status: 1 >]
irb > i.text_for_payment_status
=> nil
我尝试在键周围使用和不使用引号来定义哈希。我错过了什么?
答案 0 :(得分:1)
这样的事情会起作用:
<%= 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”=&gt;“key”,但这就是为什么,为什么上面的类级方法返回哈希反转。)
在我的索引操作中,返回原因列在其中一列中。在那里,我可以简单地通过
获得价值@return_headers.each do |rh|
rh.return_reason
end
如果您无法运行它,请检查该键的类型和值是否正确。也许在方法中使用logger.info添加一些调试信息,以查看那里使用的实际数据。