如何将对象行中的数据从rails中的同一个类复制到另一个对象行

时间:2014-10-12 06:29:04

标签: sql ruby-on-rails ruby

我一直在网上搜索,但我没有运气能够做到最好的方法。

我有一个控制器,在该控制器中我执行一个sql查询来检索来自用户的所有请求

    @solicitudes = Solicitud.where("user_id = ?",@current_user.id)

我想知道如何将主对象上的每个数据行传输到具有相同状态的所有请求的正确对象。我试过了:

    @solicitudes.each do |solicitud|
           if solicitud.estado == 1
             @solicitudes_pendientes << solicitud
           else
             if solicitud.estado == 2
               @solicitudes_aprobadas << solicitud
             else
               if solicitud.estado == 3
                 @solicitudes_rechazadas << solicitud
               end
             end
          end
     end

但显然不起作用。

目前我正在使用3个sql查询将所有请求检索到相应的对象中,但需要3次+ 2次额外交易:

@solicitudes_pendientes = Solicitud.where("estado = 1 and user_id = ?",@current_aplicante.id)


    @solicitudes_aprobadas = Solicitud.where("estado = 2 and user_id = ?",@current_aplicante.id)


    @solicitudes_rechazadas = Solicitud.where("estado = 3 and user_id = ?",@current_aplicante.id)

等待任何有用的建议。谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Enumerable#group_by

 @solicitudes = Solicitud.where(:user_id => @current_user.id).entries.group_by(&:estado)

将为您提供表格的哈希

  {
    1 => [#<Solicitud estado: 1>, #<Solicitud estado: 1>],
    2 => [#<Solicitud estado: 2>, #<Solicitud estado: 2>, ..],
    3 => ..,
    ..
  }

您可以像

一样访问它们
@solicitudes_pendientes = @solicitudes[1]