【问题标题】:Rails query string with a period (or full stop).带有句点(或句号)的 Rails 查询字符串。
【发布时间】:2011-08-11 17:14:30
【问题描述】:

我目前正在尝试处理 RoR。我将两个字符串传递给我的控制器。一个是随机的十六进制字符串,另一个是电子邮件。该项目用于对数据库进行简单的电子邮件验证。我遇到的问题是当我输入如下内容来测试我的页面时:

http://signup.testsite.local/confirm/da2fdbb49cf32c6848b0aba0f80fb78c/bob.villa@gmailcom

我在:email 的参数哈希中得到的只是'bob'。我将. 放在gmailcom 之间,因为这会导致匹配根本无法进行。

我的路由匹配如下:

match "confirm/:code/:email" => "confirm#index"

这似乎很简单,足以满足我的需要。我很难弄清楚这笔交易是什么,以及如何寻找答案。任何帮助或指导将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby routes query-string rails-routing


    【解决方案1】:
    match "confirm/:code/:email" => "confirm#index", :email => /.*/
    

    我认为这里最好设置get方法

    get "confirm/:code/:email" => "confirm#index", :email => /.*/
    

    【讨论】:

      【解决方案2】:

      您的问题是 Rails 试图将 .villa@gmailcom 解释为格式规范(例如 .html.json)。 AFAIK,标准解决方法(或至少我使用的)是将其添加到您的路线:

      :requirements => { :email => /.*/ }
      

      这会诱使 Rails 对 :email 包含的内容不屑一顾。

      您在谷歌上搜索“@”或“.”时找不到任何东西,我并不感到惊讶。没有做任何有用的事情。

      【讨论】:

      • @griffithben:当我发现这个问题时,我快疯了。 Rails 开发人员认为,出于某种短视的原因,您只想在 RESTful URL 中传递 ID 号。
      • 没有。原因是你可以指定format。只要您可以使用多种格式:js、pdf、xml 等
      • @fl00r:我在答案中注意到了这一点。我的评论是说 Rails 开发人员几乎总是在他们的 RESTful URL 中使用数字 ID(而不是人类可读的东西,例如电子邮件地址或域名),因此他们不会将默认路由解析行为视为问题。
      猜你喜欢
      • 2019-12-07
      • 1970-01-01
      • 2018-06-30
      • 2014-03-02
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      相关资源
      最近更新 更多