【问题标题】:Get window.location.hostname in Ruby code在 Ruby 代码中获取 window.location.hostname
【发布时间】:2019-07-31 06:35:56
【问题描述】:

我已经在数据库中存储了一些基本和重定向 url 值。我需要从浏览器中获取window.location.hostname 的值并在数据库中检查它。如何将此值传递给 ruby​​ 代码?我尝试执行以下操作:

<script>
  var base_url = window.location.hostname;
  <% url_config = UrlConfig.find_by(base_url: base_url) %>
  if (window.location.pathname == "/") {
      window.location.href = url_config.redirect_url;
</script>

但我知道这行不通,因为我无法像这样将 Javascript 变量的值传递给 Ruby 代码。我怎样才能将该值放入 Ruby 代码中?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    如果我理解得很好,您希望在用户到达主页时将其重定向到配置的 URL。

    如果您正在与 Ruby 和模型(因此是数据库)进行交互,我建议不要在视图中执行此操作,而是通过 before_action 在控制器中执行此操作。

    class MyController < ApplicationController
      before_action :redirect_to_configured_url, if: -> { current_path == root_path }
    
      # ...
      private
    
      def redirect_to_configured_url
        url_config = UrlConfig.find_by(base_url: base_url)
        redirect_to url_config.redirect_url if url_config # you also need to check if the UrlConfig was found
      end
    end
    

    【讨论】:

    • 这里root_path的值是多少?我有很多base_urls。 root_path 可以有不同的值吗?即,它的值是否等于request.host
    • root_path 始终为“/”。它指向您在config/routes.rb 中定义的控制器#method。即:root to: "home#index"
    【解决方案2】:

    我可以使用来自Railsrequest。我是这样做的:

    <script>
      var redirect_url = '<% UrlConfig.find_by(base_url: request.host).redirect_url %>';
      if (window.location.pathname == "/") {
          window.location.href = redirect_url;
      }
    </script>
    

    request.host 给出浏览器当前 url 中主机的值。然后我们可以取值并应用逻辑。

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 2011-05-12
      • 2010-11-19
      相关资源
      最近更新 更多