bala and Andy,
Thank you very much!
I choosed to override to_param() as "#{id}-#{name}".
Thank you.
--
regards,
makoto
On 4月14日, 午後5:33, Andy Jeffries <[email protected]> wrote:
> > I defined the following in routes.rb to use ':title' instead of ':id'.
>
> > map.movie '/
> > movies/:title', :controller=>'movies', :action=>'show',
> > :conditions=>{:method=>:get}
>
> > This seems to work fine, but 'movie_path()' still uses ':id' instead
> > of ':title'.
>
> > movie = Movie.get(parms[:id])
> > p movie_path(movie) #=> "/movies/1" (expected is "/movies/Avatar")
>
> > How to change 'movie_path()' to use ':title'?
>
> The reason this happens is that movie_path converts an object to a parameter
> using the to_param method of the object, rather than knowing what parameter
> the route wants.
>
> So, there are two solutions:
>
> 1)
>
> class Movie
> def to_param
> name
> end
> end
>
> 2)
>
> movie_path(movie.title)
>
> Depending on how many other paths rely on you passing a movie around, that
> will affect your decision. A little known third option is this:
>
> class Movie
> def to_param
> "#{id}-#{name}"
> end
> end
>
> That way you can just use the param :id in your path (and 1-Avatar will be
> converted to the integer 1 when searched using the :id field) but the title
> of the movie will be in the URLs for SEO purposes.
>
> Cheers,
>
> Andy
--
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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.