无法在 Rails 中将电子邮件作为 URL 中的参数发送

use*_*755 1 ruby api ruby-on-rails ruby-on-rails-4

我正在编写一个 API 来查找用户email_id

将电子邮件作为参数发送时出现错误。

路线.rb:

Rails.application.routes.draw do
  namespace :api do
    resources :users, only: [:show, :index] , param: :email
  end
end
Run Code Online (Sandbox Code Playgroud)

当我将电子邮件作为参数发送时,出现错误。URL 是http://localhost:3000/api/users/test@abc.com

ActiveRecord::RecordNotFound in Api::UsersController#show
Couldn't find User with 'id'={:email=>"test@abc"}
Run Code Online (Sandbox Code Playgroud)

这是我的路线路径:

api_users_url   GET     /api/users(.:format)            api/users#index
api_user_url    GET     /api/users/:email(.:format)     api/users#show
Run Code Online (Sandbox Code Playgroud)

Nav*_*jad 9

在您的电子邮件中有一个点.,例如@gmail.com。这个点有问题。

默认情况下,Rails Routes 中的动态段不接受点。

这就是为什么结果将是:

{
  "sender"=>"emai@gmail",
  "format"=>"com"
}
Run Code Online (Sandbox Code Playgroud)

代替

{
  "sender"=>"emai@gmail.com"
}
Run Code Online (Sandbox Code Playgroud)

解决方案:

在您的routes.rb

get 'message/:sender', to: 'main#message_sent', constraints: { sender: /[^\/]+/} , as: 'message_sent'
Run Code Online (Sandbox Code Playgroud)

重要的部分是constraints: { sender: /[^\/]+/},它让您通过 url 参数传递一个点。