Как я должен написать вставку массива для хранения двух именованных столбцов, как создает запрос SQL? - PullRequest
1 голос
/ 02 июня 2019

У меня есть установочная таблица из примерно 30 предметов, которые используются в разных местах. Я сделал один вызов для некоторых данных в контроллере приложения и подумал, что мог бы сохранить некоторые циклы ЦП и встроить некоторые вызовы collection_select sql в виде массивов, созданных с первого прохода в таблицу установки.

У меня есть одна коллекция, в которой требуется передать два значения из БД.

Я могу создать массив, который передает только один столбец в collection_select. Я врезаюсь в стену, когда пытаюсь передать два столбца данных. Вот массив, построенный с помощью вызова sql, с результирующими данными.

@myscosts = Setmeup.find_by_sql("select (t_is || '--' || description) as shipr, description::float as cost  from setmeups where active is true and g_is = 'Ship' order by t_is, srby;")

        shipr         | cost
----------------------+------
FedEx_Large--17.00   |   17
FedEx_Medium--7.00   |    7
 FedEx_Small--5.00    |    5
 Self_Delivery--1.00  |    1
 USPS_2d_Large--9.00  |    9
 USPS_2d_Medium--5.00 |    5
 USPS_2d_Small--3.00  |    3
(7 rows)

В контроллере приложения у меня есть этот код:

@setups = Setmeup.find_by_sql("select g_is, t_is, srby, description from setmeups where active = 'true' order by g_is, srby;")
#    puts @setups.class

  @setups.each do |f|
    @title = "#{f.description}" if "#{f.g_is}" == "App"  && "#{f.t_is}" == "Title"
(more code here, the next stanza works for a collection)

if f.t_is == 'Process' then
  @steps << "#{f.srby} - #{f.description}"
end

(I can not find the right way to make this one work.)
if "#{f.g_is}" == 'Ship' then
  @shpr = "#{f.t_is} -- #{f.description}"
  @cst = "#{f.description}".to_f
  @myscosts << "[#{@cst},  #{@shpr} ]"
end
(results of above in log..)
myscosts == ["[5.0,  FedEx_Small -- 5.00]", "[3.0,  USPS_2d_Small -- 3.00]", "[1.0,  Self_Delivery -- 1.00]", "[5.0,  USPS_2d_Medium -- 5.00]", "[7.0,  FedEx_Medium -- 7.00]", "[9.0,  USPS_2d_Large -- 9.00]", "[17.0,  FedEx_Large -- 17.00]"]

Шаг проверки Rails выдает ошибку, поскольку переданное значение: "shipping_quoted" => "[\" 5.0 \ ", \" FedEx_Small - 5.00 \ "]" не является числом.

Это передается, когда SQL-запрос создает массив: "Shipping_quoted" => "5,0"

Данные в приведенном выше примере не составляют все переменные и параметры настройки. Ниже приведен метод использования в программе коллекции с массивом «@myscosts», созданным прямым запросом sql:

<%= form.label :shipping_quoted %>
<%= form.collection_select :shipping_quoted, @myscosts, :cost, :shipr %>

Это collection_select У меня возникли проблемы с динамическим созданием массива, который имитирует результат запроса sql. Вот пример коллекции collection_select (с передачей только одного значения), которую я могу заставить работать (но я не понимаю, как: to_s действует как псевдоним):

<%= form.label :step %>
<%= form.collection_select :step, @steps, :to_s, :to_s %> 

Я надеюсь, что кто-нибудь поможет мне понять, как сделать что-то вроде этого: (в модели или контроллере)

@a1 = sql("select * from xytable";)  # where @a1[0..n].y = 'Y' 

 @a1.each do |k|
   if k.y != 'Y'
     @a2 << "#{k}"  # or "#{k.inspect}"
   end
 end

Таким образом, массив @ a2 имеет те же пары типов классов, структур и ключей, что и массив @ a1. Затем я мог бы использовать @ a2 в коллекции, такой как массив sql, сгенерированный как @ myscosts.

Спасибо за ваш ответ, надеюсь, я ответил на ваши вопросы с этими дополнительными данными.

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