2014-04-23 45 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