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 <andyjeffr...@gmail.com> 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 rubyonrails-t...@googlegroups.com.
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to