maurizio de magnis
2009-Jul-08 08:46 UTC
rerouting between controller''s actions *WITHOUT REDIRECT_TO*
Hello everyone, I need to implement first level permalink style url routing inside my rails application, ie: /first_link.html /another_one.html ... /last_one.html For each permalink there''s an associated record (model: Permalink) so that: permalink = Permalink.find_by_url("first_link.html") # the following gives me the action and controller associated to the permalink permalink.app_action permalink.app_action.app_controller to handle the routing of these permalinks I''m forced to use this, inside my routes.rb: map.connect('':permalink.html'', :controller => "permalinks", :action => "drive") class PermalinksController < ApplicationController def drive() permalink = Permalink.find_by_url(params[:permalink]) # TODO HERE end end the entire site is based on these kind of permalinks, so I''d like to reroute the execution flow from Permalinks::drive() to the controller''s action specified by the selected permalink. The only constraint I can''t avoid is that I can''t use redirect_to because it would rewrite the browser''s url and I need to keep the same url for the entire request. How can I achieve this? (I hope this will be a builtin feature ) Thx@ll
Maurício Linhares
2009-Jul-08 14:27 UTC
Re: rerouting between controller''s actions *WITHOUT REDIRECT_TO*
Well, that''s isn''t something easy to get going :) What you need to do is remove this "permalink" controller and implement the urls using permalinks for each model/controller pair that requires them. - Maurício Linhares http://codeshooter.wordpress.com/ | http://twitter.com/mauriciojr On Wed, Jul 8, 2009 at 5:46 AM, maurizio de magnis<maurizio.demagnis-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > Hello everyone, I need to implement first level permalink style url > routing inside my rails application, ie: > /first_link.html > /another_one.html > ... > /last_one.html > > For each permalink there''s an associated record (model: Permalink) so that: > permalink = Permalink.find_by_url("first_link.html") > # the following gives me the action and controller associated to the permalink > permalink.app_action > permalink.app_action.app_controller > > to handle the routing of these permalinks I''m forced to use this, > inside my routes.rb: > map.connect('':permalink.html'', :controller => "permalinks", :action => "drive") > > class PermalinksController < ApplicationController > def drive() > permalink = Permalink.find_by_url(params[:permalink]) > # TODO HERE > end > end > > the entire site is based on these kind of permalinks, so I''d like to > reroute the execution flow from Permalinks::drive() to the > controller''s action specified by the selected permalink. > > The only constraint I can''t avoid is that I can''t use redirect_to > because it would rewrite the browser''s url and I need to keep the same > url for the entire request. > > How can I achieve this? > > (I hope this will be a builtin feature ) > > Thx@ll > > > >
Jeffrey L. Taylor
2009-Jul-09 02:37 UTC
Re: rerouting between controller''s actions *WITHOUT REDIRECT_TO*
Quoting maurizio de magnis <maurizio.demagnis-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:> > Hello everyone, I need to implement first level permalink style url > routing inside my rails application, ie: > /first_link.html > /another_one.html > ... > /last_one.html > > For each permalink there''s an associated record (model: Permalink) so that: > permalink = Permalink.find_by_url("first_link.html") > # the following gives me the action and controller associated to the permalink > permalink.app_action > permalink.app_action.app_controller > > to handle the routing of these permalinks I''m forced to use this, > inside my routes.rb: > map.connect('':permalink.html'', :controller => "permalinks", :action => "drive") > > class PermalinksController < ApplicationController > def drive() > permalink = Permalink.find_by_url(params[:permalink]) > # TODO HERE > end > end > > the entire site is based on these kind of permalinks, so I''d like to > reroute the execution flow from Permalinks::drive() to the > controller''s action specified by the selected permalink. > > The only constraint I can''t avoid is that I can''t use redirect_to > because it would rewrite the browser''s url and I need to keep the same > url for the entire request. > > How can I achieve this? >I''ve not tried it, but can Ruby proc objects be serialized? If so, just store the appropriate method call, and call it after setting params[]. HTH, Jeffrey
Maurício Linhares
2009-Jul-09 02:57 UTC
Re: rerouting between controller''s actions *WITHOUT REDIRECT_TO*
Nops, procs can''t be serialized, but you could (at your own risk) serialize a string with the code and then eval it. - Maurício Linhares http://codeshooter.wordpress.com/ | http://twitter.com/mauriciojr On Wed, Jul 8, 2009 at 11:37 PM, Jeffrey L. Taylor<ror-f/t7CGFWhwGcvWdFBKKxig@public.gmane.org> wrote:> > Quoting maurizio de magnis <maurizio.demagnis-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>: >> >> Hello everyone, I need to implement first level permalink style url >> routing inside my rails application, ie: >> /first_link.html >> /another_one.html >> ... >> /last_one.html >> >> For each permalink there''s an associated record (model: Permalink) so that: >> permalink = Permalink.find_by_url("first_link.html") >> # the following gives me the action and controller associated to the permalink >> permalink.app_action >> permalink.app_action.app_controller >> >> to handle the routing of these permalinks I''m forced to use this, >> inside my routes.rb: >> map.connect('':permalink.html'', :controller => "permalinks", :action => "drive") >> >> class PermalinksController < ApplicationController >> def drive() >> permalink = Permalink.find_by_url(params[:permalink]) >> # TODO HERE >> end >> end >> >> the entire site is based on these kind of permalinks, so I''d like to >> reroute the execution flow from Permalinks::drive() to the >> controller''s action specified by the selected permalink. >> >> The only constraint I can''t avoid is that I can''t use redirect_to >> because it would rewrite the browser''s url and I need to keep the same >> url for the entire request. >> >> How can I achieve this? >> > > I''ve not tried it, but can Ruby proc objects be serialized? If so, just store > the appropriate method call, and call it after setting params[]. > > HTH, > Jeffrey > > > >
maurizio de magnis
2009-Jul-09 07:19 UTC
Re: rerouting between controller''s actions *WITHOUT REDIRECT_TO*
Unfortunately this solution can''t be adopted since one of my constraints is to avoid having nested directories in the url, so I can''t use something like /mycontroller/my_link.html, I''m forced to use /my_link_about_my_controller.html instead. And don''t be fooled by the pattern I''ve just used! Urls get generated in an unpredictable (by routes.rb) way. One solution I''m currently trying is by adopting "apotomo" plugin which is based upon the "cells" plugin. The latter, which is extremely simple, could''ve solved my problem but the first is even more powerful so I''m digging in with that ;) thx for sharing your thoughts btw :) 2009/7/8 Maurício Linhares <mauricio.linhares-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>:> > Well, that''s isn''t something easy to get going :) > > What you need to do is remove this "permalink" controller and > implement the urls using permalinks for each model/controller pair > that requires them. > > - > Maurício Linhares > http://codeshooter.wordpress.com/ | http://twitter.com/mauriciojr > > > > On Wed, Jul 8, 2009 at 5:46 AM, maurizio de > magnis<maurizio.demagnis-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: >> >> Hello everyone, I need to implement first level permalink style url >> routing inside my rails application, ie: >> /first_link.html >> /another_one.html >> ... >> /last_one.html >> >> For each permalink there''s an associated record (model: Permalink) so that: >> permalink = Permalink.find_by_url("first_link.html") >> # the following gives me the action and controller associated to the permalink >> permalink.app_action >> permalink.app_action.app_controller >> >> to handle the routing of these permalinks I''m forced to use this, >> inside my routes.rb: >> map.connect('':permalink.html'', :controller => "permalinks", :action => "drive") >> >> class PermalinksController < ApplicationController >> def drive() >> permalink = Permalink.find_by_url(params[:permalink]) >> # TODO HERE >> end >> end >> >> the entire site is based on these kind of permalinks, so I''d like to >> reroute the execution flow from Permalinks::drive() to the >> controller''s action specified by the selected permalink. >> >> The only constraint I can''t avoid is that I can''t use redirect_to >> because it would rewrite the browser''s url and I need to keep the same >> url for the entire request. >> >> How can I achieve this? >> >> (I hope this will be a builtin feature ) >> >> Thx@ll >> >> > >> > > > >