I have a search form that generates ugly but functional urls.The controller takes nested parameters from the url like program [program_id], or program[leader][leader_id]. So I''m trying to create a named route to make certain pre-defined searches easier for customers to embed in their own pages. So instead of "https://ourdomain.com/search?program[leader_id]=12345" Id like to have "https://ourdomain.com/leader/12345" The problem is that a named Rails route won''t accept a complex symbol in the path definition: map.leader ''leader/:program[leader_id]'' fails due to the brackets in parameter name symbol. Even properly defining the symbol as map.leader "leader/:''program[leader_id]''" fails. Rails just won''t recognize anything other than a downcase single word. ... and I''m not in a position to change how the controller works or redefine the expected incoming parameters. Thoughts or suggestions or workarounds? Thanks, Bill
wbr wrote:> I have a search form that generates ugly but functional urls.The > controller takes nested parameters from the url like program > [program_id], or program[leader][leader_id]. > > So I''m trying to create a named route to make certain pre-defined > searches easier for customers to embed in their own pages. > > So instead of > > "https://ourdomain.com/search?program[leader_id]=12345" > > Id like to have > > "https://ourdomain.com/leader/12345" > > The problem is that a named Rails route won''t accept a complex symbol > in the path definition: > > map.leader ''leader/:program[leader_id]'' > > fails due to the brackets in parameter name symbol. Even properly > defining the symbol as > > map.leader "leader/:''program[leader_id]''" > > fails. Rails just won''t recognize anything other than a downcase > single word.So in the controller, just do params[:program][:leader_id] = params[:leader_id] . Or introduce a LeadersController.> > ... and I''m not in a position to change how the controller works or > redefine the expected incoming parameters.Why aren''t you? If you''re going to develop the app, you need to be able to make the necessary changes.> > > > Thoughts or suggestions or workarounds? > > Thanks, > BillBest, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/.
On Oct 9, 5:24 pm, wbr <banane...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> ... and I''m not in a position to change how the controller works or > redefine the expected incoming parameters. > > Thoughts or suggestions or workarounds? >Get a new gig. Seriously, any place that ties your hands like this isn''t worth putting up with. If you''re really set on working with the "can''t modify the controller but can change routes.rb" system, a truly sneaky dev could re-open the controller at the bottom of routes.rb (it''s loaded with ''load'', so you can whack any code in there) and do something like this: class SearchController before_filter :munge_params def munge_params params[:program][:leader_id] = params[:leader_id] unless params [:leader_id].blank? end end But don''t do that. Either you''re a developer or not - fencing off bits of the app doesn''t make any sense. --Matt Jones
While I appreciate the feedback, it''s not the direction I''m looking for. This rails app is huge, with views and controllers designed around a specific and complex structure. Adding controllers or restructuring the controller/view architecture every time someone wants to create a pretty route for a specific search, is not really the Rails way is it? To me, that would be sloppy programming. To clarify my original question: I want to create a route that parses path segments to parameters with complex keys: map.programs ''programs/:program[program_type]/:program [:leader_id]'', :controller=>..., :action=>... I''m looking for a way to tweak the route definition or to remap rout- definition-compatible parameters, so that by the time they reach the controller they have the correct key names.
wbr wrote:> While I appreciate the feedback, it''s not the direction I''m looking > for. This rails app is huge, with views and controllers designed > around a specific and complex structure. Adding controllers or > restructuring the controller/view architecture every time someone > wants to create a pretty route for a specific search, is not really > the Rails way is it?No. But you''ve at least got to make sure the controller expects parameters with reasonable names.> To me, that would be sloppy programming.And to me too. But that''s not the issue here.> > > To clarify my original question: > > I want to create a route that parses path segments to parameters with > complex keys: > > map.programs ''programs/:program[program_type]/:program > [:leader_id]'', :controller=>..., :action=>... > > I''m looking for a way to tweak the route definition or to remap rout- > definition-compatible parameters, so that by the time they reach the > controller they have the correct key names.Just introduce a routine in the controller that transforms the parameter names in some generic way. Problem solved. Best, -- Marnen Laibow-Koser http://www.marnen.org marnen-sbuyVjPbboAdnm+yROfE0A@public.gmane.org -- Posted via http://www.ruby-forum.com/.