Hey everybody,
I''ve started trying to be a bit fancier with my URLs, and
it''s
biting me back. :-(
I am working on a set of controllers to allow people to directly
manipulate database records... Since they all perform a similar task,
I''ve
nested them all into the "records" namespace (Records::Name ->
records/name), etc.
The main problem: URL recognition.
I have a top-level "records" controller as well. But it seems that
rails wants to divert -everything- to do with records to that controller,
instead of picking up on sub-controllers (records/name, etc). eg; if I look
up "records/name" I get "no action responded to name"... If
I try to fill
out all of the fields (records/name/index/5, say) -- i get "Recognition
failed for..."
If I write a rule like this above the ":controller/:action/:id"
rule, everythng works:
map.connect ''records/name/:action/:id'',
:controller => ''records/name''
... but of course I don''t want to have to write a rule like that for
every single sub-controller.
Is there any way to convince routing to look for the longest
possible controller name first, so that it always finds "records/name"
before just plain ol'' "records"?
Thanks,
Tyler
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Maybe design this differently? map.resources :records do |record| record.resources :names record.resources :monkeys end Note, you can also add over-riding controller name decisions. record.resources :names, :controller => "record_names" Of course, you need to be using Rails 1.2 and you need to understand all the cool things that will give you. GET /records POST /records GET /records/1 PUT /records/1 GET/records/names POST /records/names GET /records/names/1 And many other things, but I don''t know if this is what you are looking for. You should own Agile Web Development with Rails 2nd edition as it''s the best reference for Rails. Good luck! On Apr 4, 8:00 am, Tyler MacDonald <google....-oTuY4Vk9bUDG8MNy1oJpyw@public.gmane.org> wrote:> Hey everybody, > > I''ve started trying to be a bit fancier with my URLs, and it''s > biting me back. :-( > > I am working on a set of controllers to allow people to directly > manipulate database records... Since they all perform a similar task, I''ve > nested them all into the "records" namespace (Records::Name -> > records/name), etc. > > The main problem: URL recognition. > > I have a top-level "records" controller as well. But it seems that > rails wants to divert -everything- to do with records to that controller, > instead of picking up on sub-controllers (records/name, etc). eg; if I look > up "records/name" I get "no action responded to name"... If I try to fill > out all of the fields (records/name/index/5, say) -- i get "Recognition > failed for..." > > If I write a rule like this above the ":controller/:action/:id" > rule, everythng works: > > map.connect ''records/name/:action/:id'', > :controller => ''records/name'' > > ... but of course I don''t want to have to write a rule like that for > every single sub-controller. > > Is there any way to convince routing to look for the longest > possible controller name first, so that it always finds "records/name" > before just plain ol'' "records"? > > Thanks, > Tyler--~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Lee <urbansprawl-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > Maybe design this differently? > > map.resources :records do |record| > record.resources :names > record.resources :monkeys > endWhat I want is to have the "names" and "monkeys" controllers in app/controllers/records; eg app/controllers/records/name.rb with somethin like: class Records::NameController < RecordsController etc.. But yes, most of these things will probably be resources. :) Thanks, Tyler --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Here''s what I got so far, but it''s far from perfect:
In routes.rb:
map.connect ''records/:rcontroller/:id'',
:controller => ''records'', :action =>
''route''
map.connect ''records/:rcontroller/:raction/:id'',
:controller => ''records'', :action =>
''route''
map.connect ''records/:rcontroller'',
:controller => ''records'', :action =>
''route''
In a "records" controller:
def route
render_component :controller => "records/" +
params[:rcontroller],
:action => params[:raction],
:id => params[:id]
end
That seems to route things to the right place, but it also seems like
overkill for such a simple thing as organizing my controllers...???
- Tyler
Tyler MacDonald <google.com-oTuY4Vk9bUDG8MNy1oJpyw@public.gmane.org>
wrote:>
>
> Lee <urbansprawl-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
> >
> > Maybe design this differently?
> >
> > map.resources :records do |record|
> > record.resources :names
> > record.resources :monkeys
> > end
>
> What I want is to have the "names" and "monkeys"
controllers in
> app/controllers/records; eg app/controllers/records/name.rb with somethin
> like:
>
> class Records::NameController < RecordsController
>
> etc..
>
> But yes, most of these things will probably be resources. :)
>
> Thanks,
> Tyler
>
> >
--
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Tyler,
Why do you want to namespace your controllers? You shouldn''t want to
namespace your controllers just to make the urls work out that way.
What about this?
map.with_options(:path_prefix => ''/records'', :name_prefix
=>
''record_'') do |record_map|
record_map.resources :monkeys, :controller =>
''monkeys_records''
record_map.resources :names, :controller =>
''names_records''
end
This does a couple things for you. First, map.with_options allows any
resource you put in the block to have the supplied
options. :path_prefix means all your records'' urls will be like
''/
records/monkeys'' and ''/records/names''. :name_prefix
will append
''record_'' to the generated named routes. If you
aren''t familiar with
named routes, it means that in your controllers and views you can
write things like ''redirect_to record_monkeys_url'' or
''redirect_to
record_monkey_url(@monkey.id)''. In the declaration for each resource,
I supplied a different controller name. The default would just be
''MonkeysController'', but rather than worrying about
namespacing your
controllers, which can cause some difficulties, we''ve simply gave a
more detailed name to the controller and by following a convention you
keep the controllers somewhat in order. You could change the
controller names to be ''records_*'' and then they would be
sorted very
well in your file system if you want to find them easily. This method
generates alot of good stuff for you, but you need to know how to
program to the resources interface. The unique controllers name means
you don''t clash with other areas of your application if you would like
to make a different MonkeysController later to provide different
access to your data.
I hope this helps you!
Lee Hericks
On Apr 4, 11:26 am, Tyler MacDonald
<google....-oTuY4Vk9bUDG8MNy1oJpyw@public.gmane.org>
wrote:> Here''s what I got so far, but it''s far from perfect:
>
> In routes.rb:
>
> map.connect ''records/:rcontroller/:id'',
> :controller => ''records'', :action =>
''route''
>
> map.connect ''records/:rcontroller/:raction/:id'',
> :controller => ''records'', :action =>
''route''
>
> map.connect ''records/:rcontroller'',
> :controller => ''records'', :action =>
''route''
>
> In a "records" controller:
>
> def route
> render_component :controller => "records/" +
params[:rcontroller],
> :action => params[:raction],
> :id => params[:id]
> end
>
> That seems to route things to the right place, but it also seems like
> overkill for such a simple thing as organizing my controllers...???
>
> - Tyler
>
>
>
>
>
> Tyler MacDonald <google....-oTuY4Vk9bUDG8MNy1oJpyw@public.gmane.org>
wrote:
>
> > Lee <urbanspr...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:
>
> > > Maybe design this differently?
>
> > > map.resources :records do |record|
> > > record.resources :names
> > > record.resources :monkeys
> > > end
>
> > What I want is to have the "names" and "monkeys"
controllers in
> > app/controllers/records; eg app/controllers/records/name.rb with
somethin
> > like:
>
> > class Records::NameController < RecordsController
>
> > etc..
>
> > But yes, most of these things will probably be resources. :)
>
> > Thanks,
> > Tyler
>
> --- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---