2009/5/21 Stephan Wehner <[email protected]>

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

Of course, I should have thought of using a global variable rather than a
constant.  I didn't because I generally consider global variables to be
evil.  I think this may be the first time for many a year that I have found
a good use for one.  Though really, though technically it is a global
variable, it is being used as a constant.

Problem solved, many thanks for helping

Colin


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