Hi, I''ve got troubles overriding some Rails generated URL helpers... My site allows registered users to create some kind of diagrams online, and then to browse all created diagrams, etc. I''ve got a route to access a diagram created by a user: map.diagram '':owner_id/:id'', :controller => ''diagrams'', :action => ''show'' When I want to have a link or redirect to a diagram, I''m currently doing this: redirect_to diagram_path(diagram.owner, diagram) -- so that :owner_id and :id are correctly set I want to do something so that diagram_path(diagram) would generate the correct URL with diagram''s owner id and diagram''s id. What I have tried to do is to rename my route: map.full_diagram '':owner_id/:id'', :controller => ''diagrams'', :action => ''show'' and then in DiagramsHelper, to override diagram_path and diagram_url like this: def diagram_path(diagram, *args) full_diagram_path(diagram.owner, diagram, *args) end It''s working well, except for one thing: the method is not available in my controllers. Though I''ve got "helpers :all" in ApplicationController. So, in a view, diagram_path(diagram) would give "/olance/27", whereas a redirect_to diagram_path(diagram) in a controller would redirect to "/diagrams/27". If I copy my overriden methods in application_controller.rb, then it does work. So I really don''t get it, why would my helpers not be included? Is there a better way to do what I''m trying to achieve? I might have missed something in the routes mechanisms... nested routes maybe? I''m using Rails 2.3.8 by the way. Thanks a lot, Olivier -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Olivier Lance wrote:> Hi, > > I''ve got troubles overriding some Rails generated URL helpers... > My site allows registered users to create some kind of diagrams online, > and then to browse all created diagrams, etc. > I''ve got a route to access a diagram created by a user: > map.diagram '':owner_id/:id'', :controller => ''diagrams'', :action => > ''show'' > > When I want to have a link or redirect to a diagram, I''m currently doing > this: > redirect_to diagram_path(diagram.owner, diagram) -- so that :owner_id > and :id are correctly set > > I want to do something so that diagram_path(diagram) would generate the > correct URL with diagram''s owner id and diagram''s id. > > What I have tried to do is to rename my route: > map.full_diagram '':owner_id/:id'', :controller => ''diagrams'', :action => > ''show'' > > and then in DiagramsHelper, to override diagram_path and diagram_url > like this: > def diagram_path(diagram, *args) > full_diagram_path(diagram.owner, diagram, *args) > end > > It''s working well, except for one thing: the method is not available in > my controllers. Though I''ve got "helpers :all" in ApplicationController. > So, in a view, diagram_path(diagram) would give "/olance/27", whereas a > redirect_to diagram_path(diagram) in a controller would redirect to > "/diagrams/27". > > If I copy my overriden methods in application_controller.rb, then it > does work. So I really don''t get it, why would my helpers not be > included? > > Is there a better way to do what I''m trying to achieve? I might have > missed something in the routes mechanisms... nested routes maybe? > I''m using Rails 2.3.8 by the way. > > Thanks a lot, > OlivierLooks like nested routes would be a better approach for this You''d need map.resources :owner, :has_many => diagrams This would create this type of restful route owner_diagrams_path route_owner_diagram_path(@owner, @diagram) etc Once you have the route.rb file in place, you can run rake routes from rails_root to see all available routes -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Luis Saffie wrote:> Looks like nested routes would be a better approach for this > > You''d need > map.resources :owner, :has_many => diagrams > > This would create this type of restful > route owner_diagrams_path > route_owner_diagram_path(@owner, @diagram) > etc > Once you have the route.rb file in place, you can run rake routes from > rails_root to see all available routesThanks for your reply! I''ll certainly try going this way... however, do you have any idea about this overriding thing? I''d like to understand why my views can use my overriden methods but not my controllers... :\ -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Olivier Lance wrote:> Luis Saffie wrote: >> Looks like nested routes would be a better approach for this >> >> You''d need >> map.resources :owner, :has_many => diagrams >> >> This would create this type of restful >> route owner_diagrams_path >> route_owner_diagram_path(@owner, @diagram) >> etc >> Once you have the route.rb file in place, you can run rake routes from >> rails_root to see all available routes > > Thanks for your reply! > I''ll certainly try going this way... however, do you have any idea about > this overriding thing? I''d like to understand why my views can use my > overriden methods but not my controllers... :\Helpers are made for views and not controllers. However, you can still use them in your controller. Not sure whats up in your case but you can do a quick google search for rails using helpers in controllers -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
Luis Saffie wrote:> Olivier Lance wrote: >> Luis Saffie wrote: >>> Looks like nested routes would be a better approach for this >>> >>> You''d need >>> map.resources :owner, :has_many => diagrams >>> >>> This would create this type of restful >>> route owner_diagrams_path >>> route_owner_diagram_path(@owner, @diagram) >>> etc >>> Once you have the route.rb file in place, you can run rake routes from >>> rails_root to see all available routes >> >> Thanks for your reply! >> I''ll certainly try going this way... however, do you have any idea about >> this overriding thing? I''d like to understand why my views can use my >> overriden methods but not my controllers... :\ > > Helpers are made for views and not controllers. However, you can still > use them in your controller. Not sure whats up in your case but you can > do a quick google search for rails using helpers in controllersI partly agree with that... Helpers are made for views indeed, but who''s ever been doing a controller without any URL helper? That''s maybe why my overridden ones aren''t in my controllers, maybe they''re not Helpers as other view helpers? I''ll try to figure that out... Another thing now... I''m using acts_as_commentable and I have a comments controller that can create a comment and associate it to any commendable model. I''m using polymorphic_path to redirect to the model show page once the comment is added. How can I still do this with a nested route, which will require owner plus model''s id, when any other model pah would just require the model''s id?! (that''s why I came to the override at first) Thanks again! Olivier -- Posted via http://www.ruby-forum.com/. -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.