REST路由的操作

时间:2011-04-08 13:16:54

标签: ruby-on-rails-3 routes

我有一个用户控制器的路线:

  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
  • 如何将前3条规则放入 resources :users阻止?

3 个答案:

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

如何重新创建REST动作以进行注册?

match '/signup' => 'users#create', :as => 'signup'

给你

signup_url

用于您的代码

如何将前3条规则放入资源:用户阻止?

不完全确定你的意思,但是......

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美分。