операции с REST-маршрутами - PullRequest
       4

операции с REST-маршрутами

1 голос
/ 08 апреля 2011

У меня есть маршрут для контроллера пользователя:

  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 ]

3 голосов
/ 16 апреля 2011

Другие ответы о том, что делать со вторым вопросом, вполне хороши, однако лучший способ переназначить действие create как signup - это использовать параметр :path_names.

В этом случае это должно быть что-то вроде:

resources :users, :path_names => { :create => "signup" } do
    # All your other routing
end

Однако следует отметить, что URL-адрес действия create никогда не показывается пользователю ... URL-адрес созданияотправляется с помощью формы, созданной действием new.URL, который увидит пользователь, является тем для действия new.

Таким образом, вместо этого вы можете захотеть сделать:

resources :users, :path_names => { :new => "signup" } do
    # All your other routing
end
2 голосов
/ 16 апреля 2011

Как переназначить действие 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"}
0 голосов
/ 16 апреля 2011

Чтобы интегрировать первые 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

Удостоверьтесь, что вы поместили это перед resource: users, так как rails пытается найти маршрут сверху вниз и идет с первым соответствием.

Кроме того, просто кое-что рассмотреть: из названия 'users / get_my_rating' (и 2 следующих) кажется, что это скорее методы-члены, чем методы сбора, так что я бы посоветовал переместить их в блок-член иметь их в блоке коллекции. Просто мои 2 цента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...