我已经通过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
非常感谢任何和所有建议。谢谢你的时间。
答案 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