我正在给一个调度员打一个紧急电话。我的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
我的控制器有:
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的回复我不确定这可能发生的原因是什么。有人能帮我弄清楚我错过了什么吗?我不知道为什么我的帖子请求甚至没有到达我的控制器。
更新:
日志文件
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
其他更新:
我刚发现我所有的帖子请求都得到了这样的回应。他们以前都在工作,我创建了一堆新模型,突然没有一个工作。
3条答案
按热度按时间oyjwcjzk1#
这个问题比以前想的要深一点。
Rails不喜欢路由路径和资源目录在同一个目录中。
当你提交一个post请求时,你会得到
method not allowed
。问题是路径和资产目录不能重叠。这个问题特别是与该路径中的POST
请求有关。我假设在rails的某个地方,他们一定已经禁用了assets目录的所有非GET请求。在下面这个非常简单的应用程序中,你会得到一个
method not allowed
错误。因为路径/welcome
用于路由和资产前缀。文件:
config/environment/development.rb
文件:
config/routes.rb
文件:
app/controllers/welcomes_controller.rb
文件:
app/views/welcomes/index.html.rb
文件:
app/views/welcomes/create.html.rb
x7yiwoj42#
我删除了application.rb中的下面一行,问题得到了解决。
config.assets.prefix="/chefUI"
我不明白config.assets.prefix与POST请求有什么关系,但这解决了我的问题。
我很想知道原因。
lnxxn5zx3#
我得到了相同的错误,但由于
rails g scaffold
生成的代码完成的POST
请求。没道理。这是一个明亮的新应用程序,只有一个模型!所有代码都是由rails g
生成的。但是,在我的例子中,我将模型命名为
asset
,并且该路径与静态资源的标准assets/
路径冲突。事实证明,我的解决方案是做与@anirudh的解决方案相反的事情:在我的
config/application.rb
中包含以下内容:服务器重新启动,然后问题得到解决:我成功地在DB中创建了我的资产记录!