2012-06-18 101 views
0

我有一個叫做「客戶端」的視圖,它顯示了來自呼叫數據庫的呼叫列表。這工作正常。但是,當我添加一個帶有窗體後面的新按鈕時,將會創建該呼叫,但它會重定向到calls_path而不是clients_path。Rails路由重定向到錯誤的路徑

我不知道爲什麼它這樣做,我唯一的理論是,我正在處理與處理clients_controller之外的數據的操作,並且Rails默認爲calls_path。同樣的事情發生在我的刪除操作上。有人能幫我理解這一點嗎?

calls_controller 
def new 
    @call = Call.new :call_status => "open" 

    respond_with @call 
    end 

    def create 
    @call = Call.new(params[:call]) 

    if @call.save 
     redirect_to clients_path, notice: "Call was successfully created." 
     else 
     render :new 
    end 
    end 

    def destroy 
     @call = Call.find(params[:id]) 
     @call.destroy 

     respond_to do |format| 
     format.html { redirect_to clients_index_path } 
     format.json { head :no_content } 
     end 
    end 

_form.html.erb 
<%= form_for(@call) do |f| %> 

    <%= f.label :caller_name %> 
    <%= f.text_field :caller_name %> 
    <%= f.label :caller_phone %> 
    <%= f.text_field :caller_phone, :placeholder => 'xxx-xxx-xxxx' %> 
    <%= f.label :caller_email %> 
    <%= f.text_field :caller_email %> 

    <%= f.button :submit %> 

<% end %> 

routes.rb 
devise_for :users 
    match 'mdt' => 'mdt#index' 
    get "home/index" 
    resources :medics 
    resources :clients 
    resources :users 
    resources :units 
    resources :mdt do 
    collection do 
     put "in_service" 
     put "en_route" 
     put "to_hospital" 
     put "at_hospital" 
     put "on_scene" 
     put "out_of_service" 
     put "at_station" 
     put "staging" 
     put "at_post" 
     put "man_down" 
    end 
    end 
    resources :calls do 
    member do 
     post 'close' 
    end 
    end 
    root :to => 'home#index' 
    devise_scope :user do 
    get "/login" => "devise/sessions#new" 
    delete "/logout" => "devise/sessions#destroy" 
    end 

回答

0

我遇到的問題是路線。我需要一個新的電話發佈方法。在創建兩個動作(一個用於創建一個用於銷燬)以及他們的路線之後,所有事情都開始工作了。它看起來好像試圖使用默認路由和操作,這些默認路由和操作會根據我的目的重新路由到錯誤的URL。

resources :clients do 
    collection do 
     post "calls" 
    end 
    member do 
     delete "cancel" 
    end 
    end 



def calls 
    @call = Call.new(params[:call]) 

    if @call.save 
     redirect_to clients_path, notice: "Call was successfully created." 
     else 
     render :new 
    end 
    end 

    def cancel 
     @call = Call.find(params[:id]) 
     @call.destroy 

     respond_to do |format| 
     format.html { redirect_to clients_path } 
     format.json { head :no_content } 
     end 
    end