2014-04-23 77 views
0

我爲我的用戶控制器實現了一個名爲update_status的自定義更新函數。我需要一些路由幫助。我想要做的是更新只有管理員才能訪問的狀態。我通過用戶控制器中的編輯功能通過表單助手調用更新函數。這是我的形式助手代碼:導軌的自定義更新函數路由

​​

但是當我點擊保存更改我得到的是這樣的錯誤

enter image description here

我要路由的行動,使用戶ID可以解決。

控制器動作代碼:

def update_status 
    if @user.update_attributes(status_params) 
    flash[:success] = "User updated" 
    redirect_to @user 
    else 
    render 'edit' 
    end 
end 

路線:

Transpub::Application.routes.draw do 
resources :users do 
    member do 
    put 'update_status' 
    end 
end 
resources :papers 
resources :comments 
resources :reviews 
resources :sessions, only: [:new, :create, :destroy] 
resources :relationships, only: [:create, :destroy] 
resources :comments, only: [:create, :destroy] 
resources :subject_field, only: [:create, :destroy] 
#get "users/new" 

root "static_pages#home" 
match "/signup", to: "users#new", via: "get" 
match "/signin", to: "sessions#new", via: "get" 
match "/signout", to: "sessions#destroy", via: "delete" 

match "/help", to: "static_pages#help", via: "get" 
match "/about", to: "static_pages#about", via: "get" 
match "/contact", to: "static_pages#contact", via: "get" 

match "/search_papers", to: "papers#index", via: "get" 
match "/browse_papers", to: "papers#browse", via: "get" 
+0

發佈您的控制器代碼。 – Pavan

+0

你可以發佈routes.rb文件中定義的路由嗎? –

回答

1

在你的路由文件,查找對應於用戶控制的一部分,並確保您有下面的代碼

resources :users do 
    put :update_status, on: :member 
end 

這將聲明路線。你必須更新的另一件事是表單的網址。更改網址爲

form_for @user, :url => [:update_status, @user], html: { method: :put } do |f| 
+0

沒有工作我得到了一個未定義的方法update_attributes爲零類錯誤 –

+0

您是否確定在控制器操作中設置了@ user變量?你的代碼並沒有在該動作中專門設置'@ user'變量(例如'@user = User.find(params [:id])')。如果該代碼發生在'before_action'過濾器中,請確保過濾器運行於'update_status'動作。 –

+0

這個問題是關於路由。如果解決了這個問題並且出現了另一個錯誤,則需要發佈另一個問題。 – jvnill