通过电子邮件地址查找URL无法使用FriendlyId

时间:2016-02-04 20:47:23

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

我安装了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视图。

我应该如何(或什么)编码以解决这个问题?

1 个答案:

答案 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"}