Превращение ресурсов в пользовательские маршруты (Ruby / rails) - PullRequest
0 голосов
/ 12 июля 2011

Начал создавать приложение здесь.архитектура клиентского и серверного стилей, отправляющая активные ресурсы по проводам и сохраняющая их как серверную часть activeRecord.Удалось настроить его и запустить с хорошим примером в книге O Reilly, за исключением использования scaffold.

Rails маршрутизация - пользовательские маршруты для ресурсов использует map.resources из rails 2- IЯ использую рельсы 3, так что это на самом деле не применимо, и хотя я опубликовал вопрос о маршрутах от 2 до 3, я все еще не могу преобразовать это.

Итак, что я смотрю на:маршруты с

resources :user_requests

дают:

    user_requests GET    /user_requests(.:format)          {:controller=>"user_requests", :action=>"index"}
                  POST   /user_requests(.:format)          {:controller=>"user_requests", :action=>"create"}
 new_user_request GET    /user_requests/new(.:format)      {:controller=>"user_requests", :action=>"new"}
edit_user_request GET    /user_requests/:id/edit(.:format) {:controller=>"user_requests", :action=>"edit"}
     user_request GET    /user_requests/:id(.:format)      {:controller=>"user_requests", :action=>"show"}
                  PUT    /user_requests/:id(.:format)      {:controller=>"user_requests", :action=>"update"}
                  DELETE /user_requests/:id(.:format)      {:controller=>"user_requests", :action=>"destroy"}

Я хотел бы удалить это и ресурсы и иметь свои собственные маршруты, указывающие на мои собственные определения.

Здесьбыстрая попытка

  match '/user_requests(.:format)' => 'user_requests#create , :via =>:post' 
  match '/user_requests/:id(.:format)' =>"user_requests#show"

возвращает почти то же самое, что и выше

/user_requests(.:format)          {:controller=>"user_requests", :action=>"create"}
/user_requests/:id(.:format)      {:controller=>"user_requests", :action=>"show"}

За исключением существительных REST в начале и ссылок.То же самое, но мои собственные маршруты не работают.Что мне нужно добавить к моим маршрутам, чтобы заставить их делать то же самое, что и ресурсы?

Я не держу эшафот, поскольку мне сказали, что он никогда не использовался в реальном мире.И я буду менять названия своих определений, но по одному шагу за раз.

Ошибка, которую показывает сервер:

Started POST "/user_requests.xml" for 127.0.0.1 at Tue Jul 12 17:13:32 +0100 2011
  Processing by UserRequestsController#create as XML
  Parameters: {"method"=>"POST", "user_request"=>{"depth"=>3000000, "url"=>"www.stackoverflow.com"}}
  SQL (0.1ms)  SELECT 1 FROM "user_requests" WHERE ("user_requests"."url" = 'www.stackoverflow.com') LIMIT 1
  AREL (0.3ms)  INSERT INTO "user_requests" ("updated_at", "depth", "url", "created_at") VALUES ('2011-07-12 16:13:32.765392', 3000000, 'www.stackoverflow.com', '2011-07-12 16:13:32.765392')
Completed 404 Not Found in 17ms

ActionController::RoutingError (No route matches {:controller=>"user_requests", :id=>#<UserRequest id: 6, url: "www.stackoverflow.com", depth: 3000000, created_at: "2011-07-12 16:13:32", updated_at: "2011-07-12 16:13:32">, :action=>"show"}):
  app/controllers/user_requests_controller.rb:19:in `create'
  app/controllers/user_requests_controller.rb:16:in `create'

Rendered /Library/Ruby/Gems/1.8/gems/actionpack-3.0.9/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (0.8ms)

1 Ответ

0 голосов
/ 12 июля 2011

Было бы предположить, что строка 19 вашего UserRequestsController имеет что-то вроде

redirect_to @user_request

, который пытается угадать URL для показа объекта UserRequest. Rails больше не знает, как это сделать; вы потеряли вспомогательные методы, сгенерированные resources (например, user_request_path, new_user_request_path и т. д.).

Вы можете указать Rails генерировать вспомогательный метод show, добавив опцию :as к вашему маршруту show без постфикса _path:

 match '/user_requests/:id(.:format)' => "user_requests#show", :as => 'user_request'

Теперь у вас будет доступ к user_request_path и user_request_url, которые Rails может использовать для поиска URL-адреса для "показа" UserRequest.

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