On 1/18/06, Dorian Mcfarland <loaf@isness.org>
wrote:> Hi,
> 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:
def to_param
self[:unique_name]
end
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])
with
@blah = Model.find_by_unique_name(params[:unique_name])
..and you should be done.