Использование gsub для очистки строки и усечения - PullRequest
1 голос
/ 29 января 2012

Мне нужно удалить некоторые символы из строки (Mac-адрес компьютера + мусор ...) и обрезать, чтобы оставить первые 18 символов.

В настоящее время в моей модели есть следующее:

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

Это выводит список и их количество, но формат нуждается в настройке для поиска, который я сделаю.

Я попытался добавить это:

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

Но я получаюошибка неопределенного метода `gsub 'для: callstationid: Symbol

- EDIT -

Изначально вызываемый_стандарт хранится в db (модель radacct) в следующем формате:

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

Это, в основном, mac-адрес плюс имя SSID.

Мне нужно убрать тире и SSID, потому что у нас есть другая модель (местоположения), у которой есть список mac-адресов в этом формате:

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

местоположения и radacct не связаны (radacct - это модель, в которую сбрасываются все сеансы).В конце концов мне нужно сделать подсчет всех сеансов и групп по количеству вызовов с помощьюtationsidid (как показано выше).Затем мы запросим таблицу местоположений и разработаем название местоположения.Я должен остаться с чем-то вроде этого:

 location_name     session_count
 School            2
 Home              12
 Office            89

Ответы [ 2 ]

1 голос
/ 29 января 2012

Я думаю, что Popular_Location - это объект класса ActiveSupport :: OrderedHash с ключом callstationid. Так что, если я вас правильно понял, попробуйте что-то вроде

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

Я думаю, что есть и sql-способ сделать это. Вы должны выбрать подстроку с именемstationid, а затем сгруппировать ее. Проверьте эту статью http://www.ke -cai.net / 2009/06 / mysql-group-by-substring.html

1 голос
/ 29 января 2012

Я не уверен, как вы добавили туда ошибочное значение :, когда в определении модели его нет:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...