【问题标题】:Routing Error: No Route Matches路由错误:没有路由匹配
【发布时间】:2013-08-05 21:29:24
【问题描述】:

即使我相信该操作存在于我的控制器中,我也会遇到路由错误。

routes.rb:

Build::Application.routes.draw do
  resources :users do
     match 'users/:id' => 'users#username'
     get 'validate_username', on: :member
     get 'validate_email', on: :member
  end
end

new.html.erb:

 $("#user_email").on('blur', function(){
    if($(this).val()!=""){
        user_email = $(this).val();
        $.ajax({
            url:"<%=validate_email_user_path%>",
            type:'GET',
            data: {email: user_email},
            success: function(data,status,xhr){
                console.log(data);
                alert(data.message);
        });

rake 路线:

  validate_email_user GET    /users/:id/validate_email(.:format)                         users#validate_email

我做错了什么?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    如果您只想传递电子邮件而不是现有用户,那么我认为您需要更新您的路线。

    这个:

    get 'validate_email', on: :member

    应该是

    get 'validate_email/:email', on: :collection

    在用户“集合”中,您不需要将用户/用户 ID 传递给 _path 帮助程序。您的路由的实际 URL 将是 /users/validate_email 而不是 /users/:id/validate_email

    路由的 :email 部分将使 params[:email] 在您的控制器方法中可用。

    【讨论】:

    • 我试过这个,但我得到一个奇怪的错误。出于某种原因,它传递了参数 id = validate_email。这是我的日志消息:在 2013-08-05 17:53:20 -0400 开始 GET "/users/validate_email?email=test%40test.com" for 127.0.0.1 由 UsersController#show as / 参数:{"email"=>"test@test.com", "id"=>"validate_email"}
    • 您在 routes.rb 文件中使用的“最终”路线是什么?就这样我回答/回答正确:)
    • 好的,它最终解决了这个问题:get 'validate_email', on: :collection。非常感谢您的帮助!
    • 酷!我没有意识到您将电子邮件作为 URL var 传递(a la users/validate_email?email=xxx)。很高兴它正在工作!
    【解决方案2】:

    你必须以某种方式传递 :id

    validate_email_user_path user.id
    

    validate_email_user_path user
    

    【讨论】:

    • 好的,但我正在验证用户在注册时输入的电子邮件地址,所以我实际上并不想指向特定的用户 ID(还没有人登录)。我该怎么做?
    • 到目前为止我还没有自己实现它,但我建议尝试获取'users/:email/validate_email' =&gt; 'users#show' 或查看railscasts.com/episodes/…
    • 对,但是您指定的路线需要用户的 id。 :id 部分是不可协商的。如果您想在用户注册之前明确验证用户电子邮件,请考虑创建一个仅接受 user_email 作为参数的路由。
    【解决方案3】:

    您需要为用户提供 URL 助手。

    【讨论】:

      【解决方案4】:

      这不是您问题的直接答案,但可能会有所帮助。

      你知道 client_side_validations gem 吗?我认为您可以使用它,而不是自己实现所有内容。可以在 github 上找到。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多