开发者

Turning resources into custom routes (Ruby/rails)

Started building an application here. client and server style architecture sending active resources across the wire and storing as activeRecord server side. Managed to get it up and running with a nice example in an O Reilly book except its using scaffold.

Rails routing - custom routes for Resources is using map.resources from rails 2- I'm using rails 3 so Its not really applicable and while I did post a question about routes from 2 to 3, I still cant convert this.

So here whats im looking at:

Rake routes with

resources :user_requests

gives:

    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"}

I'd like to remove this and the resources and have my own routes pointing to my own defs.

Heres a quick attempt

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

returns almost the exact same as above

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

With the exception of the REST nouns at the start and the links. Its the same yet my own routes dont work. What do I need to add to my routes to make them do the same thing as resources?

I'm not keeping scaffold as I've been told its never used in the real开发者_运维问答 world. And I will be changing the names of my defs, but one step at a time.

Error that server shows:

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)


It would guess that line 19 of your UserRequestsController has something like

redirect_to @user_request

which tries to guess a URL for showing a UserRequest object. Rails no longer knows how to do this; you've lost the helper methods generated by resources (such as user_request_path, new_user_request_path, etc).

You can tell Rails to generate the "show" helper method by adding a :as option to your show route, without the _path postfix:

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

You'll now have access to a user_request_path and user_request_url, which Rails can use to find the URL to "show" a UserRequest.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜