Colin Law wrote:
> 2009/5/21 Stephan Wehner <[email protected]>
>
>>
>>
> I am trying to avoid a db query each time I reference the (constant) id
> when
> the application is running, that was the idea of looking it up when the
> class is loaded and saving in a constant (which does not work in test
> mode
> as the fixtures have not always been loaded when the class is loaded)
>
I meant it is not clear what the nature of this special record is, and
what conditions you have.
>>
>>
>> If for the Item class there is just this one special record, can you
>> force the id to be simply 0 by manipulating the database?
>>
>
> My initial solution was to have a well-known id for the special record.
> The
> problem with this in testing is that one has to then include the special
> record with that id explicitly in the fixture. One cannot then make use
> of
> the automatic fixup of habtm tables using the names of the fixture
> records
> and so have to manually provide fixtures for the habtm join tables.
> Plus
> the idea of a record in the db having a well-known id is a bit yucky.
How about adding this method to your Item class:
# is this the special record "named_scope_for_constant_record" ?
def special?
@@special_record_id ||= Item.named_scope_for_constant_record.id
self.id == @@special_record_id_id
end
There is a thread-issue around using ||= (
http://coderrr.wordpress.com/2009/04/29/is-not-thread-safe-neither-is-hashnew-hk
) but that doesn't matter here.
Now you can even stub the special? method. Also, if the condition for
special? changes you just change the method.
Stephan
> Colin
--
Posted via http://www.ruby-forum.com/.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---