我有一個現有的代碼庫,我試圖從Rails的3.2升級到Rails 4.0軌道4的方法從Rails的升級後,不允許3
我控制器稱爲assets_controller以「創造」的方法和我在我的路線文件中的一個條目:
resources :assets
在前端使用jQuery,如果我發送POST請求從布勞爾「/資產」,我得到405(不允許的方法):
$.ajax({method: 'POST', data: asset, url: '/assets' });
這在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
繼承人從 '耙路線'
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
我的繼承人開發日誌輸出:
Started POST "/assets" for 127.0.0.1 at 2015-05-27 09:39:42 -0400
(是啊,多數民衆贊成在所有的日誌都有)
POST數據: { 「ASSET_TYPE」: 「文檔」, 「稱號」: 「DNS」, 「heading_id」:9999, 「版權保護」:假的, 「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)
是資產某些保留端點在軌道4?
這可能只是一個預感,但軌道4個檢查用於跨站點請求僞造。 這意味着您不能發佈到沒有csrf標記的路線。 你應該提供一些關於這個問題的更多細節。像控制器代碼一樣,「資產」數據看起來像是發佈給控制器。 Rails 4安全指南: http://guides.rubyonrails.org/security.html – JensDebergh
我向我的控制器添加了'skip_before_filter:verify_authenticity_token',我認爲應該跳過任何csrf標記驗證,但似乎沒有幫幫我。 – denodster
@JensD我已經添加了請求的信息 – denodster