что-то вроде этого будет работать:
<%= 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
Есть много возможных вариантов этого.Но это должно сработать, и у вас будет вся информация в центральном месте.
Обновление
Хорошо, я использовал нечто подобное для нашего сайта.Нам нужно хранить return_headers для rma.Те должны хранить причину возврата в виде кода.Эти коды определены во внешней базе данных 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» => «ключ», но это причина, почему вышеупомянутый метод уровня класса возвращает инвертированный хеш.)
В моем действии index причина возврата указана в одном из столбцов.Там я могу получить значение просто:
@return_headers.each do |rh|
rh.return_reason
end
Если у вас возникли проблемы с его запуском, проверьте правильность типа и значения ключей.Возможно, добавьте некоторую отладочную информацию с logger.info в методы, чтобы увидеть, какие фактические данные используются там.