【问题标题】:Rails - Show route is used instead of one I have definedRails - 使用显示路线而不是我定义的路线
【发布时间】:2016-04-09 15:24:23
【问题描述】:

我正在使用 AJAX 来监听我的表单上名为 question_language_id 的下拉列表的更改,当它发生更改时,我想运行一些 javascript 来对我的表单进行一些更改。

我遇到的问题是 rails 直接进入 Show 动作而不是我的 update_questions_direction 动作,这导致了 show 动作 'Question could not be found with id=update_questions_direction'. 中的错误

rake 路由的顺序似乎并没有改变这一点。

我的 AJAX 调用如下:

$(document).on 'change', '#question_language_id', (evt) ->
$.ajax 'update_questions_direction',
  type: 'GET'
  dataType: 'script'
  data: {"language_id": $("#question_language_id option:selected").val()}
  error: (jqXHR, textStatus, errorThrown) ->
    console.log("AJAX Error: #{textStatus}")
  success: (data, textStatus, jqXHR) ->
    console.log("Direction was changed")

来自 routes.rb:

get 'questions/update_questions_direction', as: 'update_questions_direction'


resources :categories do
  resources :questions do
      resources :answers
      member do
          get :quizzes
      end
  end
end

rake 路由的相关输出:

update_questions_direction GET    /questions/update_questions_direction(.:format)                            questions#update_questions_direction
category_question GET    /categories/:category_id/questions/:id(.:format)                           questions#show

我不明白为什么会发生这种情况 - 为什么 rails 认为 update_questions_direction 是 id?

我得到的错误是:

ActiveRecord::RecordNotFound in QuestionsController#show
Couldn't find Question with 'id'=update_questions_direction

非常感谢您的帮助,感谢您的宝贵时间。

【问题讨论】:

    标签: ruby-on-rails ajax routes


    【解决方案1】:

    问题在于您在 ajax 调用中使用了相对路径,因此请求被放置到相对于您所在的当前路径的路径中。如果您的当前路径是 /categories/1/questions,它为什么要转到/categories/1/questions/update_questions_direction 却在数据库中找不到id 这并不神秘。 最快的解决方案是用绝对路径替换相对路径:

    $.ajax '/questions/update_questions_direction',
    

    【讨论】:

    • 非常感谢!工作完美,感谢您的解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2022-01-20
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多