0

私のレールアプリケーションには、次のモデルがあります

Transaction
  belongs_to :account
  belongs_to :agent
  belongs_to :program

そして、これがデータを取得するために使用したクエリです

def self.efficiency_report(starts=nil, ends=nil)
sql = "SELECT p.abbreviation,ag.name,
         t.miles, t.date
        FROM transactions t
        inner join accounts a on t.account_id = a.id
        inner join programs p on a.program_id = p.id
        inner join agents ag on t.agent_id = ag.id
        Group by p.id , ag.id" 
 result_array(sql)
end


def self.result_array(sql)
  conn = ActiveRecord::Base.connection
  res = conn.execute(sql)
  results = []
  res.each{|r|
    results << r
  }
  return results
end

このように、最初にプログラムごとにグループ化してから、その下のエージェント名でグループ化し、次にマイルでデータをビューにレンダリングしたい

Program:AA
  Agent:Bob
    Miles          Date 
    1234           02/12/2012           
    5463           03/12/2012 
 Agent:Ben
    Miles          Date 
    234           02/22/2012           
    344           01/02/2012 

Program:BB
  Agent:Bob
    Miles          Date 
    1234           02/12/2012           
    5463           03/12/2012 
  Agent:Ben
    Miles          Date 
    234           02/22/2012           
    344           01/02/2012

このため、私の見解では次のことを行っています

%h2 Vendor Efficiency Report
- @transactions.group_by(&:row[0]).sort.each { |data, transaction|
%h2= data.row[0]
- transaction.group_by(&:row[1]).sort.each { |data, transaction|
%table#data_table.display{:cellpadding => "0", :cellspacing => "0"}
  %h3{:style => "clear:both;margin-left:10px"}= data.row[1]
  %thead
    %tr.odd
      %td.bold{:style => "width:60px;"} Miles
      %td.bold{:style => "width:60px;"} Date
  - for t in transaction
    %tbody
      %tr
       %td{:style => "width:60px;"}= row[2] 
       %td{:style => "width:60px;"}= row[3]
  -}
-}
= will_paginate @transactions

しかし、私はこのエラーを受けています

間違った引数の型の文字列 (予想される Proc)

ここで間違っていることを誰かに教えてもらえますか、それともグループ化するための他の良い方法はありますか?

前もって感謝します

4

1 に答える 1

0

問題はあなたのgroup_by電話です。何をしているのかわかりません&:row[0]が、文字列を引数として渡しています。これがあなたが探しているものだと思います:

@transactions.group_by{ |r| r[0] }...

編集

何をしているのかを理解しただけ&:row[0]です。これはメソッドの呼び出しSymbol#[]であり、指定されたインデックスの文字を返します (基本的には のようにString)。この呼び出し:row[0]は、文字列の最初の文字を返します"row"

つまり、基本的には、次のように呼び出しているかのようでした。

@transactions.group_by(&"r")
于 2012-04-13T09:17:16.917 に答える