ruby-on-rails - 不允许的方法

标签 ruby-on-rails ruby ajax

我正在对 Controller 进行 ajax post 调用。我的 Ajax 调用是:

$.ajax({
  type:'POST',
  url:'/chefUI/configure/save_roles',
  data:{ app_name: appname, role_list: role_list},...});

我的路线文件是:

scope "/chefUI" do
    post '/configure/save_roles', to: 'admin#update_app_roles'
end

我的 Controller 有:

def update_app_roles
    begin
      application_name = params["app_name"]
      puts application_name
      role_name_list = params["role_list"]
      puts role_name_list
      if application_name and !role_name_list.empty?
      ...

我收到了 405 Method Not Allowed 响应。我不确定发生这种情况的原因是什么。有人可以帮我弄清楚我在这里缺少什么吗?我不明白为什么我的发布请求甚至没有到达我的 Controller 。


更新:

日志文件

Started GET "/chefUI/configure/app_roles?app_name=MFRH" for 127.0.0.1 at 2015-07-24 15:08:51 +0530 Processing by AdminController#app_roles as */*   Parameters: {"app_name"=>"MFRH"}   [1m[35mUser Load (1.0ms)[0m  SELECT  "users".* FROM "users" WHERE "users"."username" = $1 LIMIT 1  [["username", "an9v0s7"]]   [1m[36mApplication Load (2.0ms)[0m  [1mSELECT  "applications".* FROM "applications" WHERE (lower(app_name) = 'mfrh')  ORDER BY "applications"."id" ASC LIMIT 1[0m   [1m[35mRole Load (1.0ms)[0m  SELECT "roles".* FROM "roles" INNER JOIN "application_roles" ON "roles"."id" = "application_roles"."role_id" WHERE "application_roles"."application_id" = $1  ORDER BY roles.name ASC  [["application_id", 1]] Completed 200 OK in 217ms (Views: 0.0ms | ActiveRecord: 5.0ms)


Started POST "/chefUI/configure/save_roles" for 127.0.0.1 at 2015-07-24 15:08:57 +0530

另一个更新:

我刚刚发现我的所有帖子请求都得到了回复。它们之前都可以工作,我在新模型上创建了一堆,突然之间它们都不起作用了。

最佳答案

这个问题比之前想象的要深一些。

Rails 不喜欢路由路径和资源目录位于同一子目录中。

发出 post 请求时,您将收到method not allowed。问题是路径和资源目录不能重叠。问题主要出在该路径中的 POST 请求。我假设在 Rails 中的某个地方,他们必须禁用对 Assets 目录的所有非 GET 请求。


scope "/chefUI" do
    post '/configure/save_roles', to: 'admin#update_app_roles'
end

config.assets.prefix="/chefUI/assets"
                                ^ You need this part so they don't overlap.

在下面这个非常简单的应用程序中,您将收到不允许的方法错误。因为路径 /welcome 用于路线和 Assets 前缀。

文件:config/environment/development.rb

config.assets.prefix = '/welcome'

文件:config/routes.rb

resources :welcomes, path: 'welcomes', only: ['index', 'create']

文件:app/controllers/welcomes_controller.rb

class WelcomesController < ApplicationController
  def index
    @welcome = 'hello';
  end

  def create
    @welcome = 'world';
  end
end

文件:app/views/welcomes/index.html.rb

<%= form_for(@welcome) do |f| %>
    <%= f.submit 'Submit' %>
<% end %>

文件:app/views/welcomes/create.html.rb

<h1>Welcomes#create</h1>
<p>Find me in app/views/welcomes/create.html.erb</p>

关于ruby-on-rails - 不允许的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31606830/

相关文章:

ruby-on-rails - Ruby/Rails 音频转换插件?

html - 带句号的字符串未在 html 中正确输出

python - ruby 中 python 的 __file__ 相当于什么?

JavaScript 代码不会使用 ajax 发送电子邮件

ajax - 可在 Laravel 中的 null id 上排序

javascript - Rails 通过 ajax 发出闪光通知

当我使用远程调用或 jQuery 远程加载部分/内容时,jquery ujs 不起作用

ruby-on-rails - 获取嵌套哈希的键/值对

ruby-on-rails - find_all 数组中符合条件的元素?

ruby-on-rails - rmagick 未在 Windows 7 上构建 undefined reference 错误