2013-07-16 22 views
2

路由對我來說總是令人討厭的事情之一。耙路線會顯示我可以使用的信息,但我無法按照我希望的方式操作信息。在我的程序中,我有一個用戶模型,爲此我使用了設計。每個用戶都可以創建員工,員工成爲他們自己的用戶(使用登錄憑證等)。獲取'Rake Routes'來顯示我想要的信息

我遇到了員工「更新」方法的問題。用戶更新方法正常工作。當我運行耙路線,我得到以下行

PUT /users(.:format)     devise/registrations#update 
PUT /employees/:id(.:format)   employees#update 

當我嘗試更新我的員工,我得到的錯誤

No route matches [PUT] "/employees" 

這就是我希望能夠向他提出的路線,但它看起來像鐵軌寧願給我/員工/:id來處理。

我的路線文件包括

devise_for :users 
resources :users, :only => [:index, :show, :new, :edit, :create, :update, :destroy] 
resources :employees, :only => [:index, :show, :new, :edit, :create, :update, :destroy] 

任何幫助將是巨大的,並且在操控着我的路線的任何其他信息將是燦爛的。謝謝!

編輯

這裏是我的更新員工的控制器方法

def update 
    @employee = current_company.users.find(params[:id]) 
    if @employee.update_attributes(params[:employee]) 
     redirect_to :action => 'show', :id => @employee.id 
     flash[:notice] = "Employee information updated" 
    else 
     render :action => 'edit' 
     flash[:notice] = "No edits were made" 
    end 
    end 
+0

我添加了我的更新方法的帖子。這是否會告訴需要更新的員工?我認爲它確實如此。我對嗎? – Mike

+1

是的,這會更新員工。但是你在那裏使用'params [:id]',所以你應該對'/ employees /:id'執行一個put請求,而不是'/ employees'。 – Mischa

回答

1

爲了更新員工,Rails有知道要更新的員工和你需要的ID。如果你並不需要一個id,你應該建立一個默認的路由,而不是resources :employees

put '/employees', :to => 'employees#update' 

順便說一句,你爲什麼要使用:only,然後列出所有可能的行動?如果你想要所有的動作,你不需要:only。如果您使用上面的自定義路線,則可能需要從資源中排除更新操作。對於你可以使用:except

resources :employees, :except => :update 
+0

嗯,我想我確實需要id。這說得通。爲什麼包含'如果你不需要身份證'部分,如果你知道我需要身份證? – Mike

+0

@MikeDunnegan我不知道你是否需要一個ID。有些情況下你不需要ID。例如。如果登錄用戶只能更新自己的記錄,則不需要ID。顯然你*需要一個id,所以你應該改變你的表單,以便''放在'/ employees /:id'上。 – Mischa

+0

太棒了,關於表單的最後一點修復它。謝謝你,一羣人 – Mike