2014-03-06 91 views
0

我已經通過Rails指南和其他文檔來更好地理解路由,但我無法理解以下原因。導軌路由錯誤 - 沒有路由匹配

Routing Error 
No route matches {:action=>"preferences", :controller=>"users"} 

我已經添加了以下額外的方法(它們是尚未完成),以我的users_controller:

def preferences 
    @user = User.find(params[:id]) 
    end 

    def update_pref 
    @user = User.find(params[:id]) 
    if @user.save 
     redirect_to edit_user_registration_path, :notice => 'Updated Preferences.' 
    else 
     flash.alert = 'Unable to update preferences.' 
     render :edit 
    end 
    end 

我的routes.rb包含,

resources :users do 
    member do 
     get 'preferences' 
     put 'update_pref' 
    end 

當我運行耙:路線,我得到,

preferences_user GET /users/:id/preferences(.:format) users#preferences                         
     update_pref_user PUT /users/:id/update_pref(.:format) users#update_pref                         
        users GET /users(.:format)     users#index                           
         POST /users(.:format)     users#create                          
       new_user GET /users/new(.:format)    users#new                           
       edit_user GET /users/:id/edit(.:format)   users#edit                           
        user GET /users/:id(.:format)    users#show                           
         PUT /users/:id(.:format)    users#update                          
         DELETE /users/:id(.:format)    users#destroy 

任何和所有的建議非常感謝。謝謝你的時間。

+0

這可能期待一個id爲好。如果你使用命名的路由,例如'link_to preferences_user_path(@user)',怎麼辦?那樣有用嗎?你可以添加link_to的代碼,或者你正在生成的網址? –

+0

您能否提供有關此錯誤發生位置的更多詳細信息?它是一種形式還是一個鏈接或別的東西? –

+0

您可以分享您從哪裏調用此路徑的視圖並獲取錯誤。 –

回答

0
resources :users do 
    member do 
    get 'preferences' # comment or remove 
    put 'update_pref' 
    end 
end 

單程

get '/preferences' => 'users#preferences' 

現在你可以使用:

preferences_path 

你把它放在成員的方式,預計一個id:

preferences_user_path(user) 

另一種方式

resources :users do 
    collection do 
    get 'preferences' 
    end 
end 

,你就會有users/preferences可用,而無需通過user對象。

相關問題