如何显示保存到我的数据库中的一串用户代理字符串中的特定信息

how to show a specific information from a string of User Agents string saved into my database

我正在使用地理定位,并将一串用户代理保存到我的数据库中,如下所示:

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

对于上面的字符串,我想在视图中输出的信息是Macintosh; Intel Mac OS X 10_13_6。因此,在 frontend/views 中,我 不想 将整个数据输出到数据库中。我想从这些信息中挑选的只是为了展示用户用来登录应用程序的设计,我不知道如何只展示我想要的。任何帮助或指示我应该做什么将不胜感激。

查看

.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.

这是将用户代理字符串保存到数据库中的代码:

  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 方法,但我认为这不是解决我问题的最佳方法。

使用 user_agent gem 怎么样?

在您给出的具体示例中,您可以使用:

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

然而,这可能无法涵盖所有​​情况,使用 gem or code 来解释各种选项是您最好的选择。

您可以使用扫描方法来获取您需要的字符串。 示例:

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/)

应该会给你你想要的字符串。您可以根据自己的需要进行修改。