我有路线设置:
get 'e/:email' => "static#home"
所以在控制器中我想通过params[:email]
不知怎的,这不起作用,因为我打开了它所说的网址:
No route matches [GET] "/e/test%40gmail.com"
你将如何做到这一点?干杯!
答案 0 :(得分:1)
试试这个:
get 'e/:email' => "static#home", :format => false, :constraints => { :email => /[^\/]+/ }
默认情况下,rails不允许在参数中使用.
。
我只是尝试在我自己的rails应用程序中实现等效路由,并且它有效。 params hash看起来像这样:
{"controller"=>"pages", "action"=>"home", "email"=>"test@gmail", "format"=>"com"}
它仍然适用于我的原因是默认情况下,rails在.
是格式参数之后假设任何内容(通常使用格式参数,例如,指定你想要json - 例如。{{ 1}})。
由于您收到错误,因此您必须设置一些内容以忽略默认包含的example.com/my_controller/index.json
参数。
所以,你应该能够重现我得到的结果(即匹配的路线,但是format
param中的.com
部分,而不是format
param)以下内容:
email
但要解决您的问题,并继续排除get 'e/:email' => "static#home", :format => true
param,但要包含format
及其后的所有内容,作为.
param的一部分,您需要通过通过最后一个选项email
,它基本上只允许在电子邮件参数中使用斜杠。
此处有更多信息:Why do routes with a dot in a parameter fail to match?