Как отображать Rails выбирает значения полей, а не сохраненные целые числа в других представлениях - PullRequest
0 голосов
/ 19 февраля 2012

Я использую поле выбора в приложении Rails, которое НЕ привязано к связанной модели, но хранит целочисленные значения для статической серии опций, т. Е.

<%= select (:this_model, :this_field, [['Option1',1],['Option2',2],['Option3',3],['Option4',4]] ) %>

Если в представлении «Показать / индексировать» я хочу отобразить текст параметра (т. Е. Option1, Option2 и т. Д.), А не целочисленное значение, хранящееся в базе данных, как мне этого добиться?

Спасибо за помощь новичку в изучении веревок!

EDIT

Основываясь на предложении Торстена ниже, я реализовал следующее. Но возвращается ноль, и я не могу понять, почему.

Модель счета-фактуры:

@@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

Я попытался определить хеш с кавычками и без них вокруг клавиш. Чего мне не хватает?

1 Ответ

1 голос
/ 19 февраля 2012

что-то вроде этого будет работать:

<%= 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 в методы, чтобы увидеть, какие фактические данные используются там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...