开发者

Turning resources into custom routes (Ruby/rails)

开发者 https://www.devze.com 2023-03-19 13:05 出处:网络
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 nic

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

精彩评论

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