den*_*ter 7 ajax jquery routes ruby-on-rails-4
我有一个现有的代码库,我正在尝试从Rails 3.2升级到Rails 4.0
我有一个名为assets_controller的控制器,带有'create'方法,我的路由文件中有一个条目:
resources :assets
Run Code Online (Sandbox Code Playgroud)
在前端使用Jquery,如果我从一个浏览器向'/ assets'发送一个post请求,我得到405(Method Not Allowed):
$.ajax({method: 'POST', data: asset, url: '/assets' });
Run Code Online (Sandbox Code Playgroud)
这在Rails 3中运行得很好,我似乎无法弄清楚问题是什么.
更新:
这是我的控制器的简化版本:
class AssetsController < ApplicationController
skip_before_filter :verify_authenticity_token
def create
# params[:assets] is passed if a mass addition of assets (i.e. book) occurs
assets = []
if params[:assets]
assets = params[:assets]
else
assets.push params
end
last_asset_id = 0
assets.each do |asset_data|
asset = Object.const_get(asset_data[:asset_type]).new(asset_data)
if !asset.save
json_false_errors(asset.errors.full_messages)
return
else
last_asset_id = asset.id
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
继承人'rake routes'的输出
assets GET /assets(.:format) assets#index
POST /assets(.:format) assets#create
new_asset GET /assets/new(.:format) assets#new
edit_asset GET /assets/:id/edit(.:format) assets#edit
asset GET /assets/:id(.:format) assets#show
PATCH /assets/:id(.:format) assets#update
PUT /assets/:id(.:format) assets#update
DELETE /assets/:id(.:format) assets#destroy
Run Code Online (Sandbox Code Playgroud)
继承我的开发日志:
Started POST "/assets" for 127.0.0.1 at 2015-05-27 09:39:42 -0400
Run Code Online (Sandbox Code Playgroud)
(是的,这就是所有的日志)
POST DATA:{"asset_type":"Document","title":"DNS","heading_id":9999,"受版权保护":false,"url":" https://confidental.url ","pubtitle": "DNS","作者":""}
另一个编辑:为了诊断目的,我注释掉了我的整个路径文件,这些是做一些手动测试的结果:
POST http://localhost:8000/assets 405 (Method Not Allowed)
POST http://localhost:8000/asset 404 (Not Found)
POST http://localhost:8000/ass 404 (Not Found)
Run Code Online (Sandbox Code Playgroud)
是资产在rails 4中的某种保留端点?
事实证明,问题在于"资产"这个名称我找不到任何文件来证实这一点,但是将资产模型和控制器重命名为其他修复问题的东西.
这不仅仅是关于这个词assets
.当路径路径和资产目录位于同一子目录中时,Rails不喜欢.
在发帖子请求时,你会得到method not allowed
.问题是路径和资产目录不能重叠.问题特别POST
在于该路径中的请求.我假设在rails中的某个地方,他们必须禁用资产目录的所有非GET请求.
在下面这个非常简单的应用程序中,您将收到method not allowed
错误消息.因为路径/welcomes
用于路由和资产前缀.
文件: config/environment/development.rb
config.assets.prefix = '/welcomes'
Run Code Online (Sandbox Code Playgroud)
文件: config/routes.rb
resources :welcomes, path: 'welcomes', only: ['index', 'create']
Run Code Online (Sandbox Code Playgroud)
文件: app/controllers/welcomes_controller.rb
class WelcomesController < ApplicationController
def index
@welcome = 'hello';
end
def create
@welcome = 'world';
end
end
Run Code Online (Sandbox Code Playgroud)
文件: app/views/welcomes/index.html.rb
<%= form_for(@welcome) do |f| %>
<%= f.submit 'Submit' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
文件: app/views/welcomes/create.html.rb
<h1>Welcomes#create</h1>
<p>Find me in app/views/welcomes/create.html.erb</p>
Run Code Online (Sandbox Code Playgroud)