【问题标题】:Appending empty query string param to the URL in Rails将空查询字符串参数附加到 Rails 中的 URL
【发布时间】:2010-06-12 20:34:35
【问题描述】:

有没有办法在没有设置值的情况下将某些内容附加到查询字符串?

我希望看到正在生成的这种 URL:http://local/things?magic

我正在寻找的是当用户转到 http://local/other?magic 时,生成的页面中的每个 URL 最终都会包含 magic

以下代码几乎是一个解决方案,但它给了我http://local/things?magic=。有一个额外的 = 我不想要。

def default_url_options(options)
    if params.has_key?("magic")
        { :magic => "" }
    end
end

设置 { :magic => nil } 将完全从生成的 URL 中移除魔法。

【问题讨论】:

    标签: ruby-on-rails url routing


    【解决方案1】:

    由于以下评论的问题已更改而进行了编辑:

    啊,我明白了。

    您可以轻松地为所有设备使用相同的 URL,只需检查HTTP_USER_AGENT 的请求环境即可分开。

    但如果这种区别还不够(我认为对于 80% 以上的情况来说已经足够了),您可以执行以下操作:

    config/routes.rb:

    map.with_options :prefix => '/m', :format => 'mobile' do |mobile|
      mobile.resources :apples
      mobile.resource :user
      mobile.connect #...
    end
    
    # generates
    # /m/apples
    # /m/apples/new
    # ...
    # /m/user
    # ... 
    

    我尚未对此进行测试,但也许您必须为 :format => 'mobile' 添加 MIME 类型映射。

    【讨论】:

    【解决方案2】:

    这就是 cookie 的用途! cookies[:magic] = 'magic' 然后它会自动按照您正在寻找的方式工作。不是使用 URL 查询字符串参数,而是每当浏览器请求另一个 URL 时(直到浏览器关闭),它都会在请求中包含 cookie。

    【讨论】:

    • 问题是cookie破坏了URL(统一资源定位器)的含义。如果使用 cookie 显示页面的不同版本,则将 URL 复制粘贴给另一个用户将表现得不正常,并且为页面添加书签很可能无法按照用户的意愿工作。 Cookie 会破坏 URL 的“统一”部分,这意味着在同一个 URL 上会有不同版本的页面,这是意料之外的。但是,cookie 至少是解决问题的一种快速简便的方法,但它会带来一些令人讨厌的副作用。
    猜你喜欢
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多