... and what happens in 6 months time, when someone creates a product type
called "foo" ?

Or will you build a whole pile of validators and special rules to make sure
you never make a product with the a type that matches a route?  Seems ugly
to me.

- Korny

On Mon, Nov 29, 2010 at 4:25 PM, Dmytrii Nagirniak <[email protected]> wrote:

>
> On 29 November 2010 16:10, Korny Sietsma <[email protected]> wrote:
>
>> If you want to both match "/cars/123" and also match /foo/bar" where "foo"
>> isn't a product type... then you have a big problem just waiting to happen,
>> imho.
>>
>>
> Not necessarily.
> I think that the solution of Bayan Khalili will work pretty well here.
>
> Assuming that `Product.dynamically_generated_list_of_available_types`
> returns ['cars', 'boats'].
> Then the URLs "/cars/123" and "/boats/123" will match correctly the
> "products#show" route.
> While "/foo/bar/" will not, but will possibly match an other route.
>
> It should only be defined AFTER the "products#show" route.
>
> So far it looks like a pretty good solution.
>
> Cheers,
> Dima.
>
> - Korny
>>
>> On Mon, Nov 29, 2010 at 1:57 PM, Pat Allan <[email protected]>wrote:
>>
>>> I think the issue would more be the routing with the rest of the app -
>>> '/:type/:id' would match  a good number of paths you wouldn't actually want
>>> it to.
>>>
>>> I think Andy's got it spot on before - you do indeed use that route, but
>>> it becomes your catch-all, at the end of your routes file.
>>>
>>> There's still issues with being able to generate the paths neatly, but a
>>> helper method or two should take care of that. The following may even work:
>>>
>>>  def link_to(*args, &block)
>>>    if args[1] && args[1].is_a?(Product)
>>>      # build your product path here
>>>    else
>>>      super
>>>    end
>>>  end
>>>
>>> Could definitely be cleaner, but that's what I'd start with.
>>>
>>> --
>>> Pat
>>>
>>> On 29/11/2010, at 1:51 PM, Ben Hoskings wrote:
>>>
>>> > How about just:
>>> >
>>> >     match '/:type/:id' => 'products#show'
>>> >
>>> > And then in ProductsController#show, use params[:id] and params[:type]
>>> ?
>>> >
>>> > Ben
>>> >
>>> > On 29 November 2010 09:44, Mark Ratjens <[email protected]> wrote:
>>> > The requirement is to have urls of the form
>>> >
>>> > /cars/23
>>> >
>>> > not
>>> >
>>> > /products/cars-23
>>> >
>>> > This will, of course, be my fall-back position if I can't get exactly
>>> what is wanted.
>>> >
>>> > Also, I'm already using friendly_id ... my id's aren't actually
>>> numeric, but it doesn't change the problem. I've read though the friendly_id
>>> doco ... it doesn't seem to help with adapting the url beyond id's and
>>> nested id's. I have read at least one post where Norman Clark has answered
>>> saying that friendly_id is not  aimed at solving routing issues.
>>> >
>>> >
>>> > On Mon, Nov 29, 2010 at 9:35 AM, Andy Shen <[email protected]> wrote:
>>> > You could consider mapping the following route to products controller
>>> >
>>> > /products/:type/:id
>>> >
>>> > or have a look into friendly_id, which is along the same concept of
>>> > to_params, maybe use id like car-23, truck-37, boat-126
>>> >
>>> > On 28 November 2010 23:52, Mark Ratjens <[email protected]> wrote:
>>> > > Suppose I have an ActiveRecord called Product. I can have different
>>> kinds of
>>> > > products, say "cars", "trucks" and "boats." Because of the nature of
>>> the
>>> > > app, there is no need to subclass product (i.e, the data and
>>> behaviour is
>>> > > the same) ...
>>> > >
>>> > > ... but for SEO reasons I want to be able to generate links in the
>>> app that
>>> > > include the kind of product, not just "product", for example:
>>> > >
>>> > > /cars/23
>>> > > /trucks/37
>>> > > /boats/126
>>> > >
>>> > > not:
>>> > >
>>> > > products/23 etc
>>> > >
>>> > > The thing I am tousling with is generating the appropriate link in
>>> the app.
>>> > > Is there some way I can adapt:
>>> > >
>>> > > link_to @product.name, @product
>>> > >
>>> > > to automagically generate a link with the right product kind ... or
>>> do I
>>> > > need to do it long-hand, i.e:
>>> > >
>>> > > link_to @product.name, :controller => @product.kind, :action =>
>>> :show, :id
>>> > > => :product
>>> > >
>>> > > ?
>>> > >
>>> > > Thanks in advance
>>> > >
>>> > > Mark
>>> > >
>>> > >
>>> > > --
>>> > > You received this message because you are subscribed to the Google
>>> Groups
>>> > > "Ruby or Rails Oceania" group.
>>> > > To post to this group, send email to [email protected].
>>> > > To unsubscribe from this group, send email to
>>> > > [email protected]<rails-oceania%[email protected]>
>>> .
>>> > > For more options, visit this group at
>>> > > http://groups.google.com/group/rails-oceania?hl=en.
>>> > >
>>> >
>>> > --
>>> > You received this message because you are subscribed to the Google
>>> Groups "Ruby or Rails Oceania" group.
>>> > To post to this group, send email to [email protected].
>>> > To unsubscribe from this group, send email to
>>> [email protected]<rails-oceania%[email protected]>
>>> .
>>> > For more options, visit this group at
>>> http://groups.google.com/group/rails-oceania?hl=en.
>>> >
>>> >
>>> >
>>> > --
>>> > You received this message because you are subscribed to the Google
>>> Groups "Ruby or Rails Oceania" group.
>>> > To post to this group, send email to [email protected].
>>> > To unsubscribe from this group, send email to
>>> [email protected]<rails-oceania%[email protected]>
>>> .
>>> > For more options, visit this group at
>>> http://groups.google.com/group/rails-oceania?hl=en.
>>> >
>>> >
>>> > --
>>> > You received this message because you are subscribed to the Google
>>> Groups "Ruby or Rails Oceania" group.
>>> > To post to this group, send email to [email protected].
>>> > To unsubscribe from this group, send email to
>>> [email protected]<rails-oceania%[email protected]>
>>> .
>>> > For more options, visit this group at
>>> http://groups.google.com/group/rails-oceania?hl=en.
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Ruby or Rails Oceania" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected]<rails-oceania%[email protected]>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/rails-oceania?hl=en.
>>>
>>>
>>
>>
>> --
>> Kornelis Sietsma  korny at my surname dot com http://korny.info
>> "Every jumbled pile of person has a thinking part
>> that wonders what the part that isn't thinking
>> isn't thinking of"
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby or Rails Oceania" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<rails-oceania%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/rails-oceania?hl=en.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Ruby or Rails Oceania" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<rails-oceania%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/rails-oceania?hl=en.
>



-- 
Kornelis Sietsma  korny at my surname dot com http://korny.info
"Every jumbled pile of person has a thinking part
that wonders what the part that isn't thinking
isn't thinking of"

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
or Rails Oceania" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rails-oceania?hl=en.

Reply via email to