On 1/18/06, Dorian M. email@example.com wrote:
I just signed up so ‘hello everybody’.
As the title suggests, I was wondering if there was an easy way to specify that I want all actions/controls to be based upon a particular parameter rather than :id (in this case :unique_name). I don’t :id to appear in URLs or elsewhere, I want it all to work from :unique_name.
It seems like something that I should be able to do globally for a project, but I’m not sure where to start.
I just did this for a project I’m working on. In your routes.rb file,
define routes that make sense based on the way you want your URLs to
look. This means using something other than :id, probably.
In your model that has :unique_name as its unique identifier, make
sure you’ve got validates_uniqueness_of :unique_name, and then add:
to_param is the method that is called when you do something like:
link_to :action => ‘blah’, :unique_name => @some_model_instance
By default it just returns the id attribute, but you can override that.
Then go through your code and replace any:
@blah = Model.find(params[:id])
@blah = Model.find_by_unique_name(params[:unique_name])
…and you should be done.