我安装了friendly_id gem(版本5.1.0)并已实现文档中的步骤以扩展我的模型,将slug字段添加到表中等。此url按预期工作:
http://localhost:3000/owners/1
我试图通过电子邮件地址查找但是看看如何处理尾随.com:
http://localhost:3000/owners/me@example.com
{"id"=>"me@example",
"format"=>"com"}
由于我的客户端真的希望以json格式接收find的结果,客户端应该将此URL发送到服务器:
http://localhost:3000/me@example.com.json
但是Rails并不喜欢这样:
No route matches [GET] "/owners/me@example.com.json"
其中
http://localhost:3000/owners/1.json
按预期返回json视图。
我应该如何(或什么)编码以解决这个问题?
答案 0 :(得分:0)
实际上,这不是一个友善的问题。您的控制器根本没有被调用,因为您的网址(/owners/me@example.com/me@example.com
)不满足config/routes.rb
中的任何路由。
这是因为" .com"在路径的尽头。您应该添加一个约束来告诉Rails您将收到一封电子邮件作为网址的一部分。我创建了一个包含以下路由的小项目:
get "/:email", :to => "application#test", :constraints => { :email => /.+@.+\..*/ }
和控制器:
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
def test
respond_to do |format|
format.any { render :json => { :hello => params[:email] } }
end
end
end
之后,我可以使用curl调用它:
curl -H "Accept: application/json" http://localhost:3000/boo@example.com
结果:
{"hello":"boo@example.com"}