Erik,
I've had to generate a lot of my own routes rather than using resources.
Here's an example of what I'm doing to keep them clean:
map.with_options :controller => "beers" do |beers|
beers.beers "beers.:format", :action => "index", :conditions =>
{:method => :get}
beers.connect "beers.:format", :action => "create", :conditions =>
{:method => :post}
beers.connect "beers/new.:format", :action => "new", :conditions =>
{:method => :get}
beers.with_options :id => /\d+/ do |beer|
beer.beer "beers/:id.:format", :action => "show", :conditions =>
{:method => :get}
beer.connect "beers/:id.:format", :action => "update", :conditions =>
{:method => :put}
beer.connect "beers/:id.:format", :action => "destroy", :conditions =>
{:method => :delete}
end
end
map.with_options :path_prefix => "beers/:beer_id", :name_prefix =>
"beer_", :beer_id => /\d+/ do |beer
|
beer.resource :bookmark, :only => [:show, :create, :update, :destroy]
# etc...
end
I had to separate the paths for integer ids and permalink ids and this is
what I came up with for the rather complex integer id part. It's not so bad
when deconstructed like that.
Hope that helps,
Martin Emde
Tw: @martinemde
On Tue, Oct 27, 2009 at 2:50 AM, Erik Pukinskis <[email protected]>wrote:
>
> Hi Nick and Chris,
>
> Thanks for the tips! As Nick says, it's more than just the single
> route, which is why what (Chris) you're suggesting doesn't quite get
> me there.
>
> I did come across the "default routing" plugin
> (http://github.com/caring/default_routing) which purports to attach
> resources to /, but it didn't work for me. It put extra slashes in
> the routes.
>
> I patched it to generate proper URLs, but it still didn't seem to work
> quite right, and was requiring more and more patches.
>
> So, I'm just making all the routes by hand. It's starting to get
> ugly, but we'll see how it ends up. One issue is that the named
> routes are a mess. I'm starting to give up named routes. The benefit
> I get from the automagicness seems to be outweighed by the massive
> hackery I have to go through when the magic is wrong.
>
> Best,
> Erik
>
>
>
>
> On Sun, Oct 25, 2009 at 9:06 PM, Nick Zadrozny <[email protected]> wrote:
> > And I may have clicked send too soon, because that doesn't really answer
> the
> > core of your question.
> > To be honest, if you really want to be explicit and map each of the
> actions,
> > I say go ahead and do it manually. I'm going to assume that, since this
> is
> > in the root of the URL path, this is the only controller that will be
> > handled in this way. In which case, no big deal expanding that out.
> > map.user ":id", :controller => "users", :action => "show", :conditions =>
> {
> > :method => :get }
> > map.user ":id", :controller => "users", :action => "update", :conditions
> =>
> > { :method => :put }
> > map.user ":id", :controller => "users", :action => "destroy", :conditions
> =>
> > { :method => :delete }
> > map.user ":id/edit", :controller => "users", :action => "edit",
> :conditions
> > => { :method => :get }
> > Now, I left off the index, create and new actions here. They're the ones
> > that give me pause. Do you really want to put each action in the root of
> > your URL namespace? If so, cool, go for it. However, what I suspect might
> > work equally well is to simply override the "show" case.
> > map.resources :users
> > map.user ":id", :controller => "users", :action => "show"
> > I think (but have not recently tested, so do some experimenting) that
> this
> > should override the user_path helper method and generally redirect you to
> > "/whomever" where appropriate, while still using the "/users" prefix for
> > other actions. At any rate, I seem to recall having done something
> similar
> > with an older project of mine, so it may serve as an idea worth pursuing
> for
> > your app.
> > I hope that's a bit more helpful!
> > --
> > Nick Zadrozny
> >
> > >
> >
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
SD Ruby mailing list
[email protected]
http://groups.google.com/group/sdruby
-~----------~----~----~----~------~----~------~--~---