Rails路由错误 - 没有路由匹配

时间:2014-03-06 13:05:30

标签: ruby-on-rails routing

我已经通过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

当我跑rake:路线时,我明白了,

 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   

非常感谢任何和所有建议。谢谢你的时间。

2 个答案:

答案 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

答案 1 :(得分:0)

您需要将用户对象分配给网址。

喜欢用户

 preferences_user_path(@user)

这将创建一个类似users / 1 / preferences

的网址

请访问文档http://guides.rubyonrails.org/v3.2.13/routing.html#adding-more-restful-actions