2014-04-23 1 views
0

사용자 컨트롤러에 update_status라는 사용자 정의 업데이트 기능을 구현하고 있습니다. 라우팅 관련 도움이 필요합니다. 내가하고 싶은 일은 관리자 만 액세스 할 수있는 상태를 업데이트하는 것입니다. 사용자 컨트롤러의 편집 기능을 통해 양식 도우미를 통해 업데이트 기능을 호출합니다. 이 양식 도우미에 대한 내 코드입니다 :레일 용 사용자 정의 업데이트 기능

<%= form_for @user, :url => url_for(:controller => "users", :action => "update_status"), method: :put do |f| %> 
     <%= render "shared/error_messages", object: f.object %> 

     <%= f.check_box :admin %> 
     <%= f.label :admin %> 

     <%= f.check_box :editor %> 
     <%= f.label :editor %> 

     <%= f.submit "Save Changes", class: "btn btn-primary" %> 
    <% end %> 

하지만 내가 얻을 모든 사용자 ID가 될 수 있도록

enter image description here

내가 경로로 작업을하려면이 오류가 변경 사항을 저장 클릭 할 때 해결됨.

컨트롤러 액션 코드 :

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 

경로를 선언합니다. 업데이트해야 할 또 다른 사항은 양식의 URL입니다. URL을

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

작동하지 않았습니다. 정의되지 않은 메소드가 있습니다. nil 클래스 오류에 대한 update_attributes가 있습니다. –

+0

컨트롤러 작업 내에서'@ user' 변수를 설정했는지 확인 했습니까? 코드에서 해당 동작 내에서 '@ user' 변수를 구체적으로 설정하지 않습니다 (예 :'@user = User.find (params [: id])'). 그 코드가'before_action' 필터에서 일어나고 있다면, 필터가'update_status' 액션을 위해 실행되는지 확인하십시오. –

+0

질문은 라우팅에 관한 것입니다. 문제가 해결되고 다른 오류가 발생하면 다른 질문을 게시해야합니다. – jvnill