【问题标题】:Rails 3 Getting different request from same url depending on actionRails 3根据操作从相同的url获取不同的请求
【发布时间】:2011-08-17 15:21:02
【问题描述】:

我正在创建一个 ajax 请求并构建 url,如下所示:

    function submitYear(year){
    new Ajax.Request('update_make/'+year, { method: 'get'});
}

当我对我的 car_infos 控制器执行新操作时,http://localhost:3000/car_infos/new 这个 Ajax 请求工作正常。我收到一个请求:

开始 GET "/car_infos/car_infos/update_make/2011"

路线匹配,一切顺利。但是,如果创建时出现错误,则 url 变为 http://localhost:3000/car_infos,然后当我的 ajax 请求触发时,我会收到路由错误:

开始获取“/update_make/2002” 没有路线匹配“/update_make/2002”

以下是创建失败时我的控制器中发生的情况:

format.html { render :action => "new" }

我明白为什么会出现路由错误,因为我没有将路由设置为 /update_make/。这是我的路线。

    match 'car_infos/update_make/:year', :controller => 'car_infos', :action => 'update_make'

所以两个问题。

  1. 为什么当 url 从 car_infos/new 变为 car_infos 时我的 get 请求会改变

  2. 我该如何解决这个问题,所以当我在 javascript 中创建 url 时它适用于这两种情况?我不认为为 /update_make 设置路线是答案。如果我重定向到 /new,那么我会丢失字段值和错误消息。

谢谢,

【问题讨论】:

    标签: ruby-on-rails-3 url routes


    【解决方案1】:
    1. 您将 ajax 请求发送到相对路径,因此如果您的浏览器位置路径更改,请求路径也会更改。由于 Rails 或 javascript 中的重定向,浏览器位置路径可能会发生变化。

      这是一个错字吗(2x "/car_infos")?

      开始 GET "/car_infos/car_infos/update_make/2011

    2. 您可以在 javascript 中拼出绝对网址:

      function submitYear(year){
          var absoluteUrl = 'http://' + window.location.host +
                              '/car_infos/update_make/' + year;
          new Ajax.Request(absoluteUrl, { method: 'get'});
      }
      

    【讨论】:

    • 感谢您提供的信息和代码。我有一个 javascript 函数,它解析 url 并根据结果构造不同的 url。这干净多了。 (是的,当我将 car_infos 放入 url 并且是新的时,我必须复制 get 。)
    猜你喜欢
    • 1970-01-01
    • 2011-06-05
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    相关资源
    最近更新 更多