2012-04-13 5 views
0

で私はモデルグループは私のRailsアプリケーションにRailsのビューで

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 

しかし、私は誰も私が私がここで間違っているのか、グループ化のため、他のより良い方法はありmは何を知らせますか?このエラーに

間違った引数のString型(予想PROC)

を取得メートル事前

答えて

0

おかげで、問題はあなたのgroup_by呼び出しです。私は&:row[0]が何をしているのかは分かりませんが、引数として文字列を渡しています。私は、これはあなたが探しているものだと思う:

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

編集

だけ&:row[0]は何をやっていた考え出しました。 Symbol#[]メソッドへの呼び出しです。このメソッドは、指定されたインデックスに文字を返します(本質的にはStringのように)。 :row[0]コールは、文字列"row"の最初の文字を返します。

あなたが呼んでいたかのように、基本的に、それがあった: `::

@transactions.group_by(&"r") 
+0

どうもありがとう、それは愚かな間違いだった:) –

+0

興味深いが、私はいくつかのテストでした行を[0]'与えますあなたは文字列 '' row "(つまり' 'r" ')の最初の文字を返します。奇妙な。私は前にその構文を見たことがなかった。 – tsherif

+0

アクションの結果が完全なモーダルになったら、&のように "@ transactions.group_by(&:payment_date).sort.each {| date、transaction |"ここで、payment_dateはトランザクションで一度の列です –

関連する問題