как показать конкретную информацию из строки строки User Agents, сохраненной в моей базе данных - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю с Geolocation, и в моей базе данных сохранена строка User Agent, как показано ниже:

Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit / 537.36 (KHTML), как Gecko) Chrome / 68.0.3440.106 Safari / 537.36

В этом случае из приведенной выше строки информация, которую я хотел бы вывести в своих представлениях, - Macintosh; Intel Mac OS X 10_13_6.Таким образом, во внешнем интерфейсе / представлениях я не хочу выводить все данные как их в базе данных.Все, что я хочу извлечь из этой информации, это просто показать устройство, которое пользователь использовал для входа в приложение, и я не знаю, как я покажу только то, что я хочу.Буду признателен за любую помощь или указатель на то, что я должен сделать.

view

.row
  .panel.panel-primary
    .panel-heading
      span = t('admin_header.traffics')
    .panel-body
      = table_for(@traffic, class: 'table table-condensed table-hover') do |t|
        - t.column :ua, 'Device Used', class: 'col-xs-1' # But this shows all the string which I do not want, I only want specific details from it.

Вот код, который сохраняет строку User Agent в базу данных:

  def save_signup_history(member_id)
    SignupHistory.create(
      member_id: member_id,
      email: @member.email,
      ip: request.remote_ip,
      accept_language: request.headers["Accept-Language"],
      ua: request.headers["User-Agent"], #Here is User Agent
      login_location: get_ip_location
    )
  end

Единственное, о чем я могу думать, это использовать метод .remove, но я не думаю, что это лучшее решение моей проблемы.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вы можете использовать метод сканирования, чтобы получить необходимую строку.Пример:

user_agent = Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36

тогда

user_agent.scan(/Mac.*_6/)

даст вам желаемую строку.Вы можете изменить его в соответствии с вашими требованиями.

0 голосов
/ 19 сентября 2018

Как насчет использования user_agent gem ?

В приведенном вами конкретном примере вы можете использовать:

user_agent = request.env['HTTP_USER_AGENT']
user_agent.match(/\(.*?\)/)[0]

Однако это может не охватывать все случаи, а также использовать код gem или , который учитывает различные варианты, является вашей лучшей ставкой.

...