2012-01-28 4 views
1

文字列(コンピュータのMACアドレス+ジャンク...)からいくつかの文字を削除し、最初の18文字を切り捨てる必要があります。リストとその数を出力しますがフォーマットは私がやる検索するための調整を必要とするgsubを使用して文字列を消去し、切り捨て

def popular_locations 
    popular_locations = Radacct.group(calledstationid).order('calledstationid desc').count 
end 

現在、私は私のモデルでは、以下があります。

私はこれを追加してみました:

clean_mac_address = :calledstationid.gsub(/[^0-9a-z]/i, '') 

しかし、私はのためのエラー未定義のメソッド `GSUB」取得:calledstationidを:シンボル

- EDIT -

当初calledstationidが中に保存されています次の形式のdb(radacctモデル):

00-18-0A-21-44-7B:Home Office 

基本的にはMACアドレスにSSID名を加えたものです。私たちはこの形式でMACアドレスのリストを持っている別のモデル(場所)があるので、私はダッシュやSSIDを取り除く必要がある

00:18:0A:21:44:7B 

場所とradacctは(関係ないradacctはどこのモデルでありますすべてのセッションがダンプされます)。最終的に私がしなければならないことは、すべてのセッションを数え、calledstationid(上記参照)によってグループ化することです。次に、ロケーションテーブルを照会し、ロケーション名を調べます。私がモデル定義がそれを持っていないときは、そこに誤った:を置くかどうかはわかりません

location_name  session_count 
School   2 
Home    12 
Office   89 

答えて

1

:私はこのような何かをしておく必要があり

clean_mac_address = calledstationid.gsub(/[^0-9a-z]/i, '') 

あなたはおそらく何を意味します実行するには、それを渡す前に、その変数をクリーンアップします

def popular_locations 
    # Clean up calledstationid 
    calledstationid.gsub!(/[^0-9a-z]/i, '') 

    # Find it and return 
    Radacct.group(calledstationid).order('calledstationid desc').count 
end 
+0

NameError:未定義のローカル変数またはメソッド 'calledstationid ' – simonmorley

+0

私はちょうどあなたの元の例にあったものをとっています。この変数はどこから来るはずですか? – tadman

+0

calledstationidは私のdbのフィールドです。 – simonmorley

1

私はpopular_locationがactivesupportの対象であることを考える::キーとしてcalledstationidとOrderedHashクラス。 私は右のあなたを理解するのであれば、私はそれをしなかったために、SQL-方法もあると思い

result = Radacct.group(calledstationid).order('calledstationid desc').count 
result.each do |key, value| 
    puts key.gsub(/[^0-9a-z]/i, '') # formatted key 
    puts value # count 
end 

のようなものを試してみてください。 calledstationidから部分文字列を選択し、それをグループ化する必要があります。 この記事をチェックhttp://www.ke-cai.net/2009/06/mysql-group-by-substring.html

+0

vueからカウント値も削除されているようです。 – simonmorley

+0

そうだけど、そうでも見えるの? – simonmorley

+0

はい、ビューでは、私の答えを更新 – Fivell

関連する問題