【问题标题】:URL finding by email address not working with FriendlyId通过电子邮件地址查找 URL 不适用于 FriendlyId
【发布时间】:2016-05-14 16:07:48
【问题描述】:

我已经安装了friendly_id gem(5.1.0 版),并且已经实施了文档中的步骤来扩展我的模型,将 slug 字段添加到表中,等等。这个网址按预期工作:

http://localhost:3000/owners/1

我正在尝试通过电子邮件地址查找,但请查看尾随 .com 的处理方式:

http://localhost:3000/owners/me@example.com

{"id"=>"me@example",
 "format"=>"com"}

由于我的客户端确实希望以 json 格式接收查找结果,因此客户端应该将此 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 视图。

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

【问题讨论】:

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


    【解决方案1】:

    实际上,这不是friendly_id 问题。您的控制器根本没有被调用,因为您的 URL (/owners/me@example.com/me@example.com) 不满足您在 config/routes.rb 中的任何路由。

    这是因为路径末尾的“.com”。您应该添加一个约束来告诉 Rails 您将有一封电子邮件作为 url 的一部分。我创建了一个带有以下路由的小项目:

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

    【讨论】:

    • 您的确切设置有效,因此我接受了答案并感谢您提供的帮助。当我试图让我的所有者捕捉到这个动作时,Rails 会深入到超类中,而不是查找 params[:email],而是查找 params[:id],所以我会继续玩这个。
    • 我的错:我不得不改变路线以获得“owners/:email”等,而不是仅仅获得“/:email”——非常感谢!!!
    猜你喜欢
    • 2016-09-16
    • 2015-09-10
    • 1970-01-01
    • 2011-12-09
    • 2015-01-29
    • 2017-12-02
    • 2015-04-09
    • 1970-01-01
    • 2016-05-09
    相关资源
    最近更新 更多