[PUT] http:// foo /data/base_states/?id=8
到我的控制器,最好用這種風格的定義:
`match '/data/base_state:id' => 'base_state#create_or_update', via: [:put]`
如何?
似乎有許多不同的方式來定義路線,文檔有所欠缺。會對任何其他建議的語法(即有效)感興趣。
不知道爲什麼建議的路線不工作,這是我的routes.rb和控制器......
的config/routes.rb中
EntwineBe::Application.routes.draw do
namespace :data, defaults: {format: :json} do
resources :event_categories
resources :state_categories
resources :base_events
resources :base_states
match '/block/:bock' => 'block#show', via: [:get] # curiously, this WORKS AS EXPECTED with GET http://foo/data/block/foo
match '/base_state/:id' => 'base_states#create_or_update', via: [:put]
end
end
應用程序/ controllers/data/base_states_controller.rb
class Data::BaseStatesController < ApplicationController
before_action :set_base_state, only: [:show, :edit, :update, :destroy]
def index
@base_states = BaseState.all
end
def show
end
def new
@base_state = BaseState.new
end
def edit
end
def create # typical REST is that this is PUT
@base_state = BaseState.new(base_state_params)
respond_to do |format|
if @base_state.save
format.html { redirect_to @base_state, notice: 'Base state was successfully created.' }
format.json { render action: 'show', status: :created, location: data_base_state_url(@base_state) }
else
format.html { render action: 'new' }
format.json { render json: @base_state.errors, status: :unprocessable_entity }
end
end
end
def create_or_update
logger.info "WTF"
end
def destroy
@base_state.destroy
respond_to do |format|
format.html { redirect_to base_states_url }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_base_state
@base_state = BaseState.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def base_state_params
params.require(:base_state).permit(:foo, :bar)
end
end
>
404 -'耙路線'
data GET /data/block/:block(.:format) data/code_block#show {:format=>:json}
PUT /data/base_state/:id(.:format) data/base_states#create_or_update {:format=>:json}
PUT /data/base_state:id(.:format) base_state#create_or_update {:format=>:json}
例如呼叫
$.ajax({'type':'PUT', 'url':'/data/base_state?id=8'})
$.ajax({'type':'PUT', 'url':'/data/base_state/?id=8'})
$.ajax({'type':'PUT', 'url':'/data/base_state?id=8.json'}) // not that expect it to need/I want to have .json
$.ajax({'type':'PUT', 'url':'/data/base_state/?id=8.json'}) // not that expect it to need/I want to have .json
的相關輸出!
嘗試的URL「/數據/ base_state的末尾添加以.json /8.json' – Slicedpan
@Slicedpan實際上工作:)!甜。如果你回答我會接受。 ...我怎麼能得到它沒有.json迴應,但? – Purrell
你缺少的Ajax調用的數據類型:'數據類型:「json''那麼你不必在URL的末尾寫'.json'。 – spas