将当前行与Ruby on Rails中的上一行ActiverRecord结果进行比较

时间:2017-02-14 14:25:11

标签: sql ruby-on-rails ruby

我需要从查询结果中创建一个带有optgroup的选项列表,如下所示:

<select>
  <optgroup label="here one of the results of query">
    <option>rest of results</option>
  </optgroup>
</select> 

我需要这样的东西(或者更好)。 php中的示例:

<?php
  $sql= "query here";
  $result=$connection->createCommand($sql)->queryAll(); //to execute the query and save in the variable result


  for ($i=1; $i <count($result) ; $i++) 
  { 
    $a = $i-1
    if ($result[$a]["optiongroup"] == $result[$i]["optiongroup"])
    {
      // agree to the optiongroup with an option
    }
    else
    {
      // close the optiongroup and starts a new option group
    }
  } 
?>

我有这个:

控制器:

@componentes = Tipo.find_by_sql("SELECT t1.tip_titulo as pieza, t2.tip_id, t2.tip_titulo FROM `tipos` t1
    LEFT JOIN tipos t2 ON (t1.tip_id = t2.tip_id_padre)
    WHERE t1.tip_id_padre IN (38)")

在查询中,结果显示如下:

pieza           tip_id  tip_titulo
Fuente de poder  41      Ventilador
Fuente de poder  42      Conector de alimentacion
Memoria Ram      43      Placa
Memoria Ram      44      Reloj

所以select必须以这种方式出现:

<select>
  <optgroup label="Fuente de poder">
    <option value="41">Ventilador</option>
    <option value="42">Conector de alimentacion</option>
  </optgroup>
  <optgroup label="Memoria RAM">
    <option value="43">Placa</option>
    <option value="44">Reloj</option>
  </optgroup>
</select>

如何使用Rails 5.0.1解决这个问题? 问候。

2 个答案:

答案 0 :(得分:0)

在常规rails应用程序中,您应该定义一个视图模板(应该具有html.erb结尾的控制器名称,例如products.html.erb)

然后在products.html.erb中定义:

<select>
 <optgroup label="here one of the results of query">
 <% @components.each do |component| %>
        <option value='<%= component.tip_id %>'> <%= component.tip_titulo %></option>
 <%end%>
</select>

因此,您将看到在控制器中定义的@componenets可以在模板视图中自动访问。

请参阅Rails的文档选择http://apidock.com/rails/ActionView/Helpers/FormOptionsHelper/select

答案 1 :(得分:0)

我确实知道@Joel_Blum,看:

<select class="form-control" name="tip_id_componente[]" id="tip_id_componente" multiple="multiple" size="8" style="color: black; width: 400px; ">
    <% @componentes.each do |c| %>
                                                                    <option id="<%= c.tip_id %>" value="<%= c.tip_id %>"><%= c.tip_titulo %> (<%= c.pieza %>)</option>
                                                                <%  end %>
</select>

但如果我同意这样的选择组,那么它似乎没有选择组:

   <select class="form-control" name="tip_id_componente[]" id="tip_id_componente" multiple="multiple" size="8" style="color: black; width: 400px; ">

 <% @componentes.each do |c| %>
<optgroup label="<%=c.pieza%>">                                                                 
<option id="<%= c.tip_id %>" value="<%= c.tip_id %>"><%= c.tip_titulo %> (<%= c.pieza %>)</option>
</optgroup>
<%  end %>

然后显示如下的html代码:

<select>
<optgroup label="Fuente de poder">
<option value="41">Ventilador</option>
</optgroup>
<optgroup label="Fuente de poder">
<option value="42">COnector de alimentacion</option>
</optgroup>
<optgroup label="Memoria ram">
<option value="43">placa</option>
</optgroup>
<optgroup label="Memoria ram">
<option value="44">reloj</option>
</optgroup>