我有一个用户控制器的路线:
get 'users/get_my_rating'
get 'users/recover_password'
get 'users/get_last_comments'
post 'users/update_rating'
resources :users do
member do
get 'about'
get 'comments'
get 'friends'
end
end
create
REST动作重新映射到
signup
?resources :users
阻止?答案 0 :(得分:3)
关于如何处理第二个问题的其他答案完全没问题,但将create
操作重新设置为signup
的最佳方法是使用:path_names
选项。
在这种情况下,它应该是:
resources :users, :path_names => { :create => "signup" } do
# All your other routing
end
但是,有一点需要注意的是,create
操作的网址永远不会显示给用户...创建网址会由new
操作创建的表单发布。用户将看到的网址是new
操作的网址。
因此你可能会这样做:
resources :users, :path_names => { :new => "signup" } do
# All your other routing
end
答案 1 :(得分:2)
match '/signup' => 'users#create', :as => 'signup'
给你
signup_url
用于您的代码
不完全确定你的意思,但是......
resources :users do
member do
get 'about'
get 'comments'
get 'friends'
end
collection do
get 'get_my_rating' # => UsersController get_my_rating
get 'recover_password' # => UsersController recover_password
get 'get_last_comments' # => UsersController get_last_comments
post 'update_rating' # => UsersController update_rating
end
end
结果
get_my_rating_users GET /users/get_my_rating(.:format) {:action=>"get_my_rating", :controller=>"users"}
recover_password_users GET /users/recover_password(.:format) {:action=>"recover_password", :controller=>"users"}
get_last_comments_users GET /users/get_last_comments(.:format) {:action=>"get_last_comments", :controller=>"users"}
update_rating_users POST /users/update_rating(.:format) {:action=>"update_rating", :controller=>"users"}
答案 2 :(得分:0)
要整合前3条路线,请执行以下操作:
resources :users do
member do
get 'about'
get 'comments'
get 'friends'
end
collection do
get 'get_my_rating'
get 'recover_password'
get 'get_last_comments'
end
end
另外,您可以添加:as => 'name_here'以各种成员和集合规则生成* _url和* _path助手。查看rake routes
以查找路线名称等。
覆盖REST创建的位置:
match '/users' => 'users#signup', :as => 'signup', :via => :post
确保在资源之前放置:用户的东西,因为rails尝试从上到下找到路线并与第一场比赛一起进行。
另外,只需要考虑一下:从'users / get_my_rating'(以及后面的2)的名称来看,这听起来像是成员方法而不是集合方法,所以我会考虑将这些方法转移到成员块中将它们放在收集区中我的2美分。