2012-06-18 79 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