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
-~----------~----~----~----~------~----~------~--~---

Reply via email to